如何在IMemoryCache的单独实例中清除cacheKey

问题描述 投票:0回答:1

我正在ASP.NET Core 1.1上运行,在此Startup.cs中我配置策略以及DistributedMemoryCache,如下所示:

var roleRepo = new RoleRepo(Configuration, new MemoryCache(new MemoryCacheOptions()));

services.Configure<AuthorizationOptions>(options =>
{
    options.AddPolicy("MyPolicy", policy => policy.Requirements.Add(new MyPolicyRoleRequirement(roleRepo)));
});

services.AddDistributedMemoryCache();

//...

services.AddTransient<IRoleRepo, RoleRepo>();

我遇到的问题是,我正在尝试为特定用户删除特定的cacheKey。当用户被添加到新角色时,我然后尝试删除该cacheKey的现有缓存条目(用户名和角色名),然后使用更新的“ isInRole”值重新添加。但是,当我删除的控制器然后添加新的cacheKey来检查查询是否存在时,它始终返回null。然后,如果我尝试导航到检查用户是否在角色中的页面,则该检查仍显示cacheKey的PREVIOUS值。

我相信发生的事情是,由于我的策略通过了我的RoleRepo的一个实例(注入了IMemoryCache),所以最终它是一个单独的实例,而不是services.AddTransient中的实例]行。

[我该如何配置它,以便IMemoryCache是单例,还是专门将我的RoleRepo的SAME实例传递到services.AddTransient行?

这是我的`RoleRepo设置:

private readonly IMemoryCache _memoryCache;

public RoleRepo(IConfigurationRoot configuration, IMemoryCache memoryCache)
    : base(configuration)
{
    _memoryCache = memoryCache;
}
c# asp.net-core caching asp.net-core-1.1
1个回答
0
投票
我找到了解决该问题的方法。因为我正在“更新”我的RoleRepo,所以我继续前进,并将THAT INSTANCE作为单例添加...
© www.soinside.com 2019 - 2024. All rights reserved.