【发布时间】:2022-01-13 06:03:36
【问题描述】:
我想通过标签助手生成的特定键清除内存缓存。使用下面的代码可以清除缓存标签生成的整个内存缓存。
public partial class MemoryCacheManager : CacheKeyService, ILocker, IStaticCacheManager
{
private readonly CacheTagHelperMemoryCacheFactory _factory;
public MemoryCacheManager(AppSettings appSettings, IMemoryCache memoryCache,
CacheTagHelperMemoryCacheFactory factory) : base(appSettings)
{
_memoryCache = memoryCache;
_factory = factory;
}
public Task ClearAsync()
{
PropertyInfo prop = _factory.Cache.GetType().GetProperty("EntriesCollection", BindingFlags.Instance | BindingFlags.GetProperty | BindingFlags.NonPublic | BindingFlags.Public);
var allInnerCacheTags = prop.GetValue(_factory.Cache) as ICollection;
foreach (var item in allInnerCacheTags)
{
object cacheKeyOfTag = item.GetType().GetProperty("Key", BindingFlags.Instance | BindingFlags.GetProperty | BindingFlags.NonPublic | BindingFlags.Public);
_memoryCache.Remove(cacheKeyOfTag);
}
}
}
有什么方法可以获取 _varyBy 的值。
【问题讨论】:
-
这个 _varby 是自定义属性还是缓存属性?是否要单独提取该属性的值?
-
@await Component.InvokeAsync("TopMenu") 在剃刀视图中,我正在使用上面的代码,从 c# 端,我可以看到值。所以我想得到那个值。因为我不想清除整个字典而不是单个项目,所以我想从内存中清除该特定条目。
标签: c# asp.net-core .net-core caching in-memory-cache