Наш подход заключается в использовании CacheManager
с расширением стратегии . CacheManager находится в основной части решения, и на это ядро ссылаются все роли.
Для общих объектов, таких как стратегии генерации ключей кэша и даже имена конечных точек, у нас есть список WellKnownComponents
. Это сгенерированный TT файл (ну, файлы), который может быть расширен частичными классами.
В моем случае я бы добавил функцию генерации идентификатора ключа кэша в мой хорошо известный класс компонентов, а затем сделал ссылку на приложение, например,
var seeker = CacheManager.Get<RequestOnly>(WellKnownComponents.Seeker.Caching.GetSeekerKey(seekerId), () => GetSeekerFromDataBase(seekerId));
Это примерно так, как мы это делаем. И да, вам все еще нужны специальные методы сброса для аннулирования, но с другой стороны, вы можете как разделить, так и объединить их там, где это важно и уместно (например, один ваш компонент, а не вокруг решения).