Nopcommerce缓存在添加列表后似乎是空的

本文关键字:似乎是 列表 缓存 存在 添加 Nopcommerce | 更新日期: 2023-09-27 18:03:24

我在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

Nopcommerce缓存在添加列表后似乎是空的

我认为问题是您无法在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请求。

如果你想使用静态缓存,你需要指示autofacc在你为你的服务配置依赖时注入它。看看DependencyRegistrar.cs,有几个这样的例子,例如:

builder.RegisterType<ProductTagService>().As<IProductTagService>()
            .WithParameter(ResolvedParameter.ForNamed<ICacheManager>("nop_cache_static"))
            .InstancePerHttpRequest();

我建议您使用这种方法,而不是添加对MemoryCacheManager的静态引用。

我通过添加this._cacheManager = new MemoryCacheManager()而不是

解决了这个问题
this._cacheManager = cacheManager,其中缓存管理器是ICacheManager的一个实例。