2013-01-14 55 views
0

嘗試將EntLib從3.1升級到5.0,並且遇到了緩存的奇怪問題。我們所有的緩存相關的單元測試拋出:將企業庫緩存從3.1升級到5.0

failed: System.ArgumentException : Type does not provide a constructor taking a single parameter type of NameValueCollection

我們使用隨EntLib默認CacheManger,正常工作與v3的,但是當我看Microsoft.Practices.EnterpriseLibrary.Caching.CacheManager類我看不到任何相關3.1或5.0版本的構造函數?

[ConfigurationNameMapper(typeof(CacheManagerDataRetriever)), CustomFactory(typeof(CacheManagerCustomFactory))] 
public class CacheManager : IDisposable 
{ 
    // Methods 
    internal CacheManager(Cache realCache, BackgroundScheduler scheduler, ExpirationPollTimer pollTimer) 
    { 
     this.realCache = realCache; 
     this.scheduler = scheduler; 
     this.pollTimer = pollTimer; 
    } 

這裏是我們的配置,這是我從EntLib配置工具創建的:

<cachingConfiguration defaultCacheManager="Whatever"> 
    <cacheManagers> 
    <add name="Whatever" type="Microsoft.Practices.EnterpriseLibrary.Caching.CacheManager, Microsoft.Practices.EnterpriseLibrary.Caching, Version=5.0.414.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" 
     expirationPollFrequencyInSeconds="60" maximumElementsInCacheBeforeScavenging="1000" 
     numberToRemoveWhenScavenging="10" backingStoreName="Null Storage" /> 
</cacheManagers> 

我有一個看看遷移指南,但並沒有表現出任何東西。

我們現在是否期望爲CacheManager創建自己的包裝?

回答

1

對堆棧跟蹤的仔細檢查發現,它不是拋出異常的緩存管理器,而是我們自定義的IAuthorizationProvider

一旦我添加了必要的構造函數,大部分的單元測試都通過了。一些仍然失敗,但這似乎是由於配置和異常/錯誤處理的差異。

+0

有一點晚了,但謝謝你給我檢查堆棧跟蹤幫助我的線索,我發現問題的根源。 :) – Jannik