Я пытаюсь удалить записи из 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
вызывается, как и ожидалось, когда вносится изменение в отслеживаемый ключ, однако переданный ему экземпляр «state» всегда имеет значение null, что означает, что Я ничего не знаю о ключе кэша, зависимость которого изменилась, и поэтому не могу выполнить запланированное выселение.
Я что-то здесь упустил, я все это делаю неправильно?