当对它们所依赖的其他条目进行更改时,我试图从 MemoryCache 中逐出条目。这是通过为依赖键上的依赖项创建缓存条目更改监视器来设置的:
public bool AddToCache(string key, object dataItem,
DateTimeOffset absoluteExpiration, IEnumerable<string> dependencyKeys)
{
bool result = false;
if (!string.IsNullOrWhiteSpace(key) && dataItem != null)
{
CacheItemPolicy policy = new CacheItemPolicy {
AbsoluteExpiration = absoluteExpiration
};
if (masterKeys != null && masterKeys.Any())
{
policy.ChangeMonitors.Add(
this.provider.Cache.
CreateCacheEntryChangeMonitor(dependencyKeys));
foreach (ChangeMonitor monitor in policy.ChangeMonitors)
{
monitor.NotifyOnChanged(this.OnDependencyChanged);
}
}
result = this.provider.Cache.Add(key, dataItem, policy);
}
return result;
}
OnChangedCallBack
方法是这样的:
private void OnDependencyChanged(object state)
{
// what do I do here as "state" is always null?
}
这些项目按预期添加到缓存中,并且在OnDependencyChanged
对受监视的键进行更改时按预期调用该方法,但是传递给它的“状态”实例始终为空,这意味着我对缓存一无所知依赖项已更改并因此无法执行计划驱逐的键。
我在这里错过了什么吗,我是不是走错了路?