Как аннулировать кешированное свойство?

На моем веб-сайте ASP.NET я некоторое время сохраняю объекты, полученные из БД, и удостоверяюсь, что для каждой записи БД создается единственный экземпляр объекта.

Я также использую [InstanceCache] для кэширования рассчитанного значения для одного из бизнес-объектов, объект хранится в кэше на время сеанса пользователя.

Однако сегодня я столкнулся с вариантом использования, когда я хотел бы аннулировать кешированное значение.

Как я могу сделать это для свойств, кэшированных с помощью [InstanceCache]?

Пожалуйста, порекомендуйте.

Спасибо.


person Budda    schedule 08.05.2015    source источник
comment
Вы пробовали методы ClearCache, как я предложил? Они работали на вас? Некоторая обратная связь будет оценена.   -  person Alex    schedule 19.05.2015


Ответы (1)


Я думаю, вы сможете сделать это, используя один из ClearCache статических методов файла CacheAspect, которые позволяют очищать кеш на разных уровнях детализации:

public static void ClearCache(MethodInfo methodInfo);
public static void ClearCache(Type declaringType, string methodName, params Type[] types);
public static void ClearCache(Type declaringType, string methodName, Type[] types, object[] values);
public static void ClearCache(Type declaringType);
public static void ClearCache();

Если вы хотите очистить кеш только для определенного свойства [InstanceCache], вам нужно будет получить его MethodInfo (я думаю, для метода «get» свойства) с помощью отражения и передать его первому варианту.

Кажется, это работает для обычных аннотаций атрибутов [Cache], поэтому, если очистка кеша для элементов [InstanceCache] вообще поддерживается, это будет правильный путь.

person Alex    schedule 08.05.2015
comment
Пока что я решил удалить сам экземпляр... что, в свою очередь, приводит к вычислению нового значения кеша, поэтому мне не нужно аннулировать кеш СЕЙЧАС. Но идея вызвать статический метод ClearCache выглядит... слишком сложной. В любом случае постараюсь лучше понять. Спасибо! - person Budda; 20.05.2015