Net Core MemoryCache 未按请求重置
Net Core MemoryCache not resetting per request
.Net Core 3.0.我有一个注入 IMemoryCache 的回购协议。 Repo 注册为 Transient。我希望缓存是 cleared/reset PER 请求,但是这并没有发生。它保留从上一个请求插入的数据。我该怎么做才能根据请求重新创建 MemoryCache?
public OrganizationRepository(
IMemoryCache cache)
{
m_cache = cache;
// cache still has data in entries for subsequent requests
}
注册人数:
services.AddTransient<IOrganizationRepository, OrganizationRepository>();
这似乎有效:
services.AddScoped<MemoryCache, MemoryCache>();
然后将其作为 MemoryCache 注入
您可以轻松编写自己的内存缓存。
private readonly Dictionary<string, List<Product>> _localCache = new Dictionary<string, List<Product>>();
public async Task<List<Product>> LocalListAsync(bool invalidateCache = false)
{
const string cacheKey = "ProductList";
if (invalidateCache)
{
_localCache.Remove(cacheKey);
}
if (_localCache.TryGetValue(cacheKey, out var list))
{
return list;
}
await _products
.Include(x => x.ProductCategory)
.LoadAsync();
list = _products.Local.ToList();
_localCache.Add(cacheKey, list);
return list;
}
.Net Core 3.0.我有一个注入 IMemoryCache 的回购协议。 Repo 注册为 Transient。我希望缓存是 cleared/reset PER 请求,但是这并没有发生。它保留从上一个请求插入的数据。我该怎么做才能根据请求重新创建 MemoryCache?
public OrganizationRepository(
IMemoryCache cache)
{
m_cache = cache;
// cache still has data in entries for subsequent requests
}
注册人数:
services.AddTransient<IOrganizationRepository, OrganizationRepository>();
这似乎有效:
services.AddScoped<MemoryCache, MemoryCache>();
然后将其作为 MemoryCache 注入
您可以轻松编写自己的内存缓存。
private readonly Dictionary<string, List<Product>> _localCache = new Dictionary<string, List<Product>>();
public async Task<List<Product>> LocalListAsync(bool invalidateCache = false)
{
const string cacheKey = "ProductList";
if (invalidateCache)
{
_localCache.Remove(cacheKey);
}
if (_localCache.TryGetValue(cacheKey, out var list))
{
return list;
}
await _products
.Include(x => x.ProductCategory)
.LoadAsync();
list = _products.Local.ToList();
_localCache.Add(cacheKey, list);
return list;
}