依存している他のエントリに変更が加えられたときに、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
、監視対象のキーに変更が加えられると、メソッドは期待どおりに呼び出されますが、渡される「状態」インスタンスは常にnullであるため、キャッシュについて何も知りません。依存関係が変更されたため、計画された削除を実行できないキー。
私はここで何かを逃したことがありますか、私はこれをすべて間違った方法で行っていますか?