我正在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;
}