我正在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;
}
答案 0 :(得分:0)
我找到了解决该问题的方法。由于我正在“更新”我的RoleRepo,因此我继续进行操作,并将THAT INSTANCE作为单例添加...
services.AddSingleton<IRoleRepo>(roleRepo);