c# - 如何在 IMemoryCache 的单独实例中清除 cacheKey
问题描述
我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。当用户被添加到新角色时,我会尝试删除该缓存键(用户名加角色名)的现有缓存条目,然后使用更新的“isInRole”值重新添加。但是当我的控制器删除,然后添加新的 cacheKey 检查查询是否存在时,它总是返回 null。然后,如果我尝试导航到检查用户是否处于角色中的页面,该检查仍会显示 cacheKey 的 PREVIOUS 值。
我相信正在发生的事情是,由于我的策略通过了我的单个实例RoleRepo
(注入IMemoryCache
),它最终成为一个单独的实例,而不是 DI 在行中的实例services.AddTransient
。
我该如何配置它,所以要么IMemoryCache
是单例,要么专门将我的 SAME 实例传递RoleRepo
到services.AddTransient
行中?
这是我的 `RoleRepo 设置:
private readonly IMemoryCache _memoryCache;
public RoleRepo(IConfigurationRoot configuration, IMemoryCache memoryCache)
: base(configuration)
{
_memoryCache = memoryCache;
}
解决方案
我找到了解决这个问题的方法。由于我正在“更新”我的 RoleRepo,所以我继续将那个实例添加为单例......
services.AddSingleton<IRoleRepo>(roleRepo);
推荐阅读
- http - 检测来自聊天应用程序(Facebook messenger、WhatsApp、Slack、Teams、Telegram 等)的元数据请求
- outlook - Exchange Online 公用文件夹中的电子表格和文档是什么
- android - 单一材质 带图像的切换按钮
- python - Need help on LMGTFY(Search) command for discord.py
- javascript - 如何使用 onclick 侦听器从元素中选择数据?
- java - 为什么 META-INF 文件夹是空的?
- html - 隐藏在过滤搜索结果之前显示的标题
- javascript - JS 将请求载荷中带有特殊字符的数据发送到服务层,我们需要转义吗?
- sql-server - SQL Server XML 字段交换两个节点的值
- elasticsearch - 所有类别搜索电子商务建议热门搜索