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