gpt4 book ai didi

c# - 为什么在 ASP.Net Core 中获取多个 IMemoryCache 实例?

转载 作者:太空狗 更新时间:2023-10-29 17:57:56 25 4
gpt4 key购买 nike

在我的 ASP.NET Core 应用程序中,我认为这是 IMemoryCache 的标准用法。

在 startup.cs 我有:

services.AddMemoryCache();

在我的 Controller 中我有:

private IMemoryCache memoryCache;
public RoleService(IMemoryCache memoryCache)
{
this.memoryCache = memoryCache;
}

然而,当我进行调试时,我最终得到了多个内存缓存,每个缓存中都有不同的项目。我以为内存缓存会是一个单例?

更新了代码示例:

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 包含不同的条目。

最佳答案

多次创建 IMemoryCache 的原因是您的 RoleService 很可能获得范围内的依赖项。

要修复它,只需添加一个包含内存缓存的新单例服务,并在需要时注入(inject)而不是 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;
}

关于c# - 为什么在 ASP.Net Core 中获取多个 IMemoryCache 实例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42758705/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com