与MemoryCache中的预期项不同



当启动我的应用程序时,我正在将许多配置参数加载到MemoryCache中,我可以确认在这样做之后(在Startup.cs中),缓存中大约有280个条目。

当我注入一个IMemoryCache到一个控制器,并返回json的所有条目,突然只有16项在里面,他们不是我最初加载的那些。

发生这种情况的原因是什么?我一直在找可以清除藏匿物的地方但没有找到。immemorycache没有实现为单例吗?

在Startup。我正在添加内存缓存作为第一个语句之一:

services.AddMemoryCache();

我最初是这样加载项目的:

var spp = services.BuildServiceProvider().GetRequiredService<ISysParamProvider<IDbContext>>();
spp.LoadAll();

问题可能是,这里建立了一个新的ServiceProvider ?如果是这样,我怎么能得到ISysParamProvider实例代替?

我是否需要考虑其他事情,以便将这个实例注入到控制器中?

Thanks in advance

LoadAll()方法是这样的:

public async Task LoadAll()
{
var sysParams= this.db.Set<SysParam>().ToList();
foreach (var sysParam in sysParams)
{
if (!this.cache.TryGetValue(sysParam.ParamName, out _))
{
var cacheentryOptions = new MemoryCacheEntryOptions()
.SetSlidingExpiration(TimeSpan.FromDays(1));
this.cache.Set(sysParam.ParamName, sysParam.ParamValue, cacheentryOptions);
}
}
}

问题确实是与services.BuildServiceProvider().GetRequiredService<ISysParamProvider<IDbContext>>();,因为它似乎已经创建了IMemoryCache的另一个实例(在ISysParamProvider中注入)。

解决方法是将ISysParamProvider注入Startup的Configure方法中,并通过spp.LoadAll()填充那里的缓存。通过这样做,正确的IMemoryCache被注入ISysParamProvider

相关内容

  • 没有找到相关文章

最新更新