Caching EntLib CacheManager和IDisposable对象

Caching EntLib CacheManager和IDisposable对象,caching,enterprise-library,Caching,Enterprise Library,如何使用Microsoft企业库中的CacheManager缓存实现IDisposable接口的对象 当一个对象过期时,不会为该对象调用Dispose(),我也不能覆盖Remove(…)。我不完全清楚缓存是否应该负责调用Dispose;从缓存中删除项并不意味着它没有在其他地方被引用 此外,如果对象实现了该模式,那么终结器应该调用Dispose(如果尚未调用Dispose) 然而,企业库确实为您提供了一个钩子,允许您执行您认为必要的任何操作。该接口是ICacheItemRefreshAction接

如何使用Microsoft企业库中的CacheManager缓存实现IDisposable接口的对象


当一个对象过期时,不会为该对象调用Dispose(),我也不能覆盖Remove(…)。

我不完全清楚缓存是否应该负责调用Dispose;从缓存中删除项并不意味着它没有在其他地方被引用

此外,如果对象实现了该模式,那么终结器应该调用Dispose(如果尚未调用Dispose)

然而,企业库确实为您提供了一个钩子,允许您执行您认为必要的任何操作。该接口是ICacheItemRefreshAction接口。从缓存中删除项时,将在单独的线程上调用ICacheItemRefreshAction.Refresh方法

将项添加到缓存时,可以指定ICacheItemRefreshAction

其用法示例如下:

[可序列化]
公共类DisposeRefreshAction:ICacheItemRefreshAction
{
公共无效刷新(字符串键、对象过期值、CacheItemRemovedReason removalReason)
{
//项已从缓存中删除。请根据需要在此处执行所需的操作
//删除原因(例如,使用该项刷新缓存)。
if(expiredValue!=null&&expiredValue可识别)
{
((IDisposable)expiredValue).Dispose();
}
}
}
公共类MyClass:IDisposable
{
公共空间处置()
{
Console.WriteLine(“Dispose!”);
}
}
var cache=EnterpriseLibraryContainer.Current.GetInstance(“缓存管理器”);
Add(“myKey”,new MyClass(),CacheItemPriority.Normal,
新建DisposeRefreshAction(),新建滑动时间(TimeSpan.FromSeconds(2));

能否在缓存中对象的析构函数中调用Dispose?或者你没有这些类的代码?我有这些类的代码,我会试一试,尽管它感觉有点黑客味。完全同意,我希望其他人能提出更好的解决方案