解決“當前擴展緩存策略沒有進行註冊”的錯誤
阿新 • • 發佈:2018-07-05
註冊 tin ext redis配置 ger code 定義 cal reg
造成這個錯誤的原因是在使用 Senparc.Weixin SDK 或者 CO2NET 的擴展緩存的時候,沒有對擴展緩存策略進行註冊(激活)。解決方案如下:
.NET Framework:
在 global.asax.cs 文件的 Application_Start() 方法中,加入代碼:
RegisterService.Start() .UseSenparcWeixin(null, true, GetExContainerCacheStrategies)//必須
.NET Core:
在 startup.cs 中 加入代碼:
public void Configure(IApplicationBuilder app, IHostingEnvironment env, IOptions<SenparcSetting> senparcSetting, IOptions<SenparcWeixinSetting> senparcWeixinSetting) { //... RegisterService.Start(env, senparcSetting.Value) .UseSenparcWeixin(senparcWeixinSetting.Value, isDebug/*此處為單獨用於微信的調試狀態*/, () => GetExContainerCacheStrategies(senparcWeixinSetting.Value)) //... }
其中的 GetExContainerCacheStrategies 委托定義如下:
/// <summary> /// 獲取Container擴展緩存策略 /// </summary> /// <returns></returns> private IList<IDomainExtensionCacheStrategy> GetExContainerCacheStrategies() { var exContainerCacheStrategies = new List<IDomainExtensionCacheStrategy>(); //判斷Redis是否可用 var redisConfiguration = ConfigurationManager.AppSettings["Cache_Redis_Configuration"]; if ((!string.IsNullOrEmpty(redisConfiguration) && redisConfiguration != "Redis配置")) {
exContainerCacheStrategies.Add(RedisContainerCacheStrategy.Instance);
} //判斷Memcached是否可用 var memcachedConfiguration = ConfigurationManager.AppSettings["Cache_Memcached_Configuration"]; if ((!string.IsNullOrEmpty(memcachedConfiguration) && redisConfiguration != "Memcached配置")) { exContainerCacheStrategies.Add(MemcachedContainerCacheStrategy.Instance); } //也可擴展自定義的緩存策略 return exContainerCacheStrategies; }
GetExContainerCacheStrategies 的內容可以靈活多變,總的用意是把系統當中需要用到的擴展緩存通過這一句話進行註冊:
exContainerCacheStrategies.Add(RedisContainerCacheStrategy.Instance);
Senparc.Weixin 默認提供了三種 Container 的擴展緩存策略:
- LocalContainerCacheStrategy
- RedisContainerCacheStrategy
- MemcachedContainerCacheStrategy
其中,LocalContainerCacheStrategy 是自帶的本地緩存,會自動註冊,無需手動註冊,另外兩個是由單獨的 dll 提供的,因此需要進行一次手動的註冊。
解決“當前擴展緩存策略沒有進行註冊”的錯誤