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

时间:2019-10-02 14:36:52

标签: c# asp.net-core caching asp.net-core-1.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),所以最终成为了一个单独的实例,而不是DI' d services.AddTransient行中。

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

这是我的`RoleRepo设置:

private readonly IMemoryCache _memoryCache;

public RoleRepo(IConfigurationRoot configuration, IMemoryCache memoryCache)
    : base(configuration)
{
    _memoryCache = memoryCache;
}

1 个答案:

答案 0 :(得分:0)

我找到了解决该问题的方法。由于我正在“更新”我的RoleRepo,因此我继续进行操作,并将THAT INSTANCE作为单例添加...

services.AddSingleton<IRoleRepo>(roleRepo);