将企业库高速缓存从3.1升级到5.0

时间:2013-01-14 01:06:50

标签: .net enterprise-library

尝试从3.1升级到5.0到EntLib,我遇到了一个奇怪的缓存问题。我们所有与缓存相关的单元测试都在抛出:

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 个答案:

答案 0 :(得分:1)

对堆栈跟踪的仔细检查发现,不是缓存管理器抛出异常,而是我们的自定义IAuthorizationProvider

一旦我添加了必要的构造函数,我们的大多数单元测试都会通过。一些仍然失败,但这似乎是由于配置和异常/错误处理的差异。