簡體   English   中英

在nopCommerce插件中使用CacheManager

[英]Using CacheManager inside a nopCommerce plugin

我創建了一個nopCommerce v3.5 plugin並希望在Controller Action下將load a text file_cacheManager然后在下一個請求中重用它。

但是_cacheManager總是為我的請求Key返回NULL

這是我的代碼的一部分:

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 ......
     }
}
  • 我會忘記其他類中的某些代碼嗎? 喜歡注冊某人或... ???

  • 我怎么了

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();

默認的緩存是PerRequestCacheManager,您只需將其添加到控制器構造函數中即可獲得一個實例。 如果要使用靜態緩存,則在配置控制器的依賴項時需要指示Autofac注入它。

DependencyRegistrar.cs,

builder.RegisterType<MyController>()
                .WithParameter(ResolvedParameter.ForNamed<ICacheManager>("nop_cache_static"));

您確實應該使用DI而不是向MemoryCacheManager添加靜態引用。 這樣,您將來可以根據需要更改緩存提供程序。

NopCommerce有兩個緩存管理器。 您將獲得一個實例,該實例在處理相同的http請求時可以正常工作,但不會跨越其他請求。

您需要注入靜態緩存管理器的實例。 您可以在我對另一個問題的答復中找到所有信息: 添加列表之后,Nopcommerce緩存似乎為空

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM