我相信我的ASP.NET Core应用程序中有IMemoryCache的标准用法。
I have what I believe is a standard usage of IMemoryCache in my ASP.NET Core application.
在startup.cs中,我有:
In startup.cs I have:
services.AddMemoryCache();在我的控制器中,我有:
In my controllers I have:
private IMemoryCache memoryCache; public RoleService(IMemoryCache memoryCache) { this.memoryCache = memoryCache; }但是,当我进行调试时,最终会得到多个具有不同每个项目。我以为内存缓存将是一个单例?
Yet when I go through debug, I end up with multiple memory caches with different items in each one. I thought memory cache would be a singleton?
已更新代码示例:
public List<FunctionRole> GetFunctionRoles() { var cacheKey = "RolesList"; var functionRoles = this.memoryCache.Get(cacheKey) as List<FunctionRole>; if (functionRoles == null) { functionRoles = this.functionRoleDAL.ListData(orgId); this.memoryCache.Set(cacheKey, functionRoles, new MemoryCacheEntryOptions().SetAbsoluteExpiration(TimeSpan.FromDays(1))); } }如果我在两个不同的浏览器中运行两个客户端,当我点击第二行,可以看到this.memoryCache包含不同的条目。
If I run two clients in two different browsers, when I hit the second line I can see this.memoryCache contains different entries.
推荐答案多次创建IMemoryCache的原因是
The reason that IMemoryCache is created multiple times is that your RoleService most likely gets scoped dependencies.
要修复此问题,只需添加一个包含内存缓存的新单例服务并在需要时插入,而不是IMemoryCache:
To fix it simply add a new singleton service containing the memory cache and inject in when needed instead of IMemoryCache:
// Startup.cs: services.AddMemoryCache(); services.AddSingleton<CacheService>(); // CacheService.cs: public IMemoryCache Cache { get; } public CacheService(IMemoryCache cache) { Cache = cache; } // RoleService: private CacheService cacheService; public RoleService(CacheService cacheService) { this.cacheService = cacheService; }更多推荐
为什么要在ASP.Net Core中获取多个IMemoryCache实例?
发布评论