我在NopCommerce中遇到cacheManager
的问题
我有一个nopCommerce产品列表,其形式为IPagedList<Product>
我将它们添加到我的缓存管理器中:
_cacheManager.Set("SearchResult", products.ToList(), 5);
现在每当我尝试像这样检索它们时:
var searchresults = new List<Product>();
if (_cacheManager.IsSet("SearchResult"))
{
searchresults = _cacheManager.Get<List<Product>>("SearchResult");
}
它只是空的,就像isSet计算为false
一样。
我在添加它们之前尝试_cacheManager.Clear()
,但这也行不通。我这里的想法已经不多了。有人知道吗?
我用它作为检索的来源:
答案 0 :(得分:4)
我认为问题在于您无法在http请求之间缓存数据,但我确信您可以在同一请求期间检索该数据。
NopCommerce有两个缓存管理器。两者都在DependencyRegistrar.cs
声明:
builder.RegisterType<MemoryCacheManager>().As<ICacheManager>().Named<ICacheManager>("nop_cache_static").SingleInstance();
builder.RegisterType<PerRequestCacheManager>().As<ICacheManager>().Named<ICacheManager>("nop_cache_per_request").InstancePerHttpRequest();
默认缓存管理器仅保存当前HTTP请求的数据。第二个,静态缓存,跨越其他HTTP请求。
如果要使用静态缓存,则需要在配置服务的依赖项时指示Autofac注入它。看看DependencyRegistrar.cs
,有几个例子,例如:
builder.RegisterType<ProductTagService>().As<IProductTagService>()
.WithParameter(ResolvedParameter.ForNamed<ICacheManager>("nop_cache_static"))
.InstancePerHttpRequest();
我建议您使用此方法,而不是向MemoryCacheManager
添加静态引用。
答案 1 :(得分:-2)
我通过添加this._cacheManager = new MemoryCacheManager()
代替
this._cacheManager = cacheManager
,其中cachemanager是ICacheManager