1. 程式人生 > >解決“當前擴展緩存策略沒有進行註冊”的錯誤

解決“當前擴展緩存策略沒有進行註冊”的錯誤

註冊 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 提供的,因此需要進行一次手動的註冊。

解決“當前擴展緩存策略沒有進行註冊”的錯誤