添加列表后,Nopcommerce缓存似乎为空

时间:2014-05-15 10:07:27

标签: c# .net nopcommerce

我在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(),但这也行不通。我这里的想法已经不多了。有人知道吗?

我用它作为检索的来源:

http://www.nopcommerce.com/boards/t/12290/getting-an-item-on-the-cachemanager-requires-a-function-param-.aspx

2 个答案:

答案 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

的实例