【发布时间】:2018-05-02 00:32:40
【问题描述】:
在为多种用户缓存身份信息时,特别是在单个缓存对象中可能发生键冲突的情况下,我通常通过创建自定义缓存类来对缓存进行分区:
public BackEndUserCache: MemoryCache {
...
}
public FrontEndUserCache: MemoryCache {
...
}
我一直在考虑是否必须将依赖项注入为 Singleton 或 Scoped?
澄清一下:
1- 我认为如果我将这些绑定到 IMemoryCache 作为 Singleton,则可能存在安全漏洞,因为所有用户的凭据都将缓存在单个全局缓存列表中。
2- 如果我以 Scoped 方式绑定它,缓存对象将为每个连接创建,并且会话终止时将过期。但这在缓存时有意义吗?
【问题讨论】:
-
你想通过从 MemoryCache 继承来实现什么?
-
作为一般规则,Web 应用程序中的几乎每个依赖项都应该是请求范围的(或者在 ASP.NET Core 用语中只是“范围”)。如果要使用单例范围,则需要 100% 确定依赖项所做的任何事情都是完全线程安全的,这是一个相当高的标准。
-
@ChrisPratt:微软所说的内存缓存是线程安全的。
标签: c# caching asp.net-core asp.net-core-mvc asp.net-core-mvc-2.0