首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在CacheManager插件中使用nopCommerce

在CacheManager插件中使用nopCommerce
EN

Stack Overflow用户
提问于 2015-01-26 14:26:12
回答 2查看 2.3K关注 0票数 2

我已经创建了一个nopCommerce v3.5 plugin,并希望load a text file在Controller下使用_cacheManager,然后在下一个请求中重用它。

但是_cacheManager总是将NULL还给我,以满足我的请求Key

这是我代码的一部分:

代码语言:javascript
复制
public class AbcController : Controller   
{
    private readonly ICacheManager _cacheManager;

    public AbcController(ICacheManager cacheManager)
    {
        this._cacheManager = cacheManager;
    }

    public ActionResult Test(string title,string titleLink, string backColor,  string textColor, string timeColor)
    {
        try
        {
           // myText is always NULL here >>   :(
           var myText = _cacheManager.Get<string>("myText");

           if (string.IsNullOrEmpty(jsText))
           {
              string path = HttpContext.Server.MapPath("~/plugins/Misc.Test/App_Data/text.txt");
              myText = System.IO.File.ReadAllText(path);

              // Fill cacheManager >> 
              _cacheManager.Set("myText", myText, int.MaxValue);
            }

            // Other codes ......
        }

        // Other codes ......
     }
}
  • 我是不是忘记了其他类中代码的某些部分?比如注册某人或者.?
  • 我犯了什么错?
EN

回答 2

Stack Overflow用户

发布于 2015-02-28 13:11:26

NopCommerce有两个缓存managers.Both在DependencyRegistrar.cs处声明:

代码语言:javascript
复制
builder.RegisterType<MemoryCacheManager>().As<ICacheManager>().Named<ICacheManager>("nop_cache_static").SingleInstance();
builder.RegisterType<PerRequestCacheManager>().As<ICacheManager>().Named<ICacheManager>("nop_cache_per_request").InstancePerHttpRequest();

默认的缓存是PerRequestCacheManager,您只需将它添加到控制器构造函数中就可以得到一个实例。如果要使用静态缓存,则需要指示Autofac在为控制器配置依赖项时注入它。

DependencyRegistrar.cs,

代码语言:javascript
复制
builder.RegisterType<MyController>()
                .WithParameter(ResolvedParameter.ForNamed<ICacheManager>("nop_cache_static"));

您确实应该使用DI,而不是向MemoryCacheManager添加静态引用。这样,将来如果需要,可以更改缓存提供程序。

票数 5
EN

Stack Overflow用户

发布于 2015-01-27 12:08:07

NopCommerce有两个缓存管理器。在处理相同的http请求时,您将获得一个实例,但该实例不会扩展到其他请求。

您需要注入静态缓存管理器的实例。您可以在我对另一个问题的答复中找到所有的信息:Nopcommerce cache seems empty after adding a list

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28152005

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档