[英]How to override a nopcommerce view file with a view file inside the plugin?
[英]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.