首页 > 解决方案 > 如何在 IMemoryCache 的单独实例中清除 cacheKey

问题描述

ASP.NET Core 1.1Startup.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。当用户被添加到新角色时,我会尝试删除该缓存键(用户名加角色名)的现有缓存条目,然后使用更新的“isInRole”值重新添加。但是当我的控制器删除,然后添加新的 cacheKey 检查查询是否存在时,它总是返回 null。然后,如果我尝试导航到检查用户是否处于角色中的页面,该检查仍会显示 cacheKey 的 PREVIOUS 值。

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

我该如何配置它,所以要么IMemoryCache是单例,要么专门将我的 SAME 实例传递RoleReposervices.AddTransient行中?

这是我的 `RoleRepo 设置:

private readonly IMemoryCache _memoryCache;

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

标签: c#asp.net-corecachingasp.net-core-1.1

解决方案


我找到了解决这个问题的方法。由于我正在“更新”我的 RoleRepo,所以我继续将那个实例添加为单例......

services.AddSingleton<IRoleRepo>(roleRepo);

推荐阅读