Segregated IDistributedCache DI Потребление - PullRequest
0 голосов
/ 21 октября 2019

Я реализую интерфейс IDistributedCache через DI в моем приложении, и он работает как положено.

Единственная проблема заключается в том, что, поскольку это кеш, общий для всего приложения, разработчик, пишущий кеширующий код, может не обязательно знать, какие ключи использовались в остальной части приложения (или, возможно, даже в других приложениях, подключающихся к тому жераспределенный кеш). Например, допустим, я хочу кешировать пользователей с помощью ключа: «UserId: {userId}». Другой разработчик в другом модуле решает, что он также хочет кешировать пользователей, и он предлагает тот же ключ. Разве эти два не будут конфликтовать друг с другом?

Я надеялся, что есть что-то похожее на шаблон ILogger, где вы можете разрешить ILogger, только указав тип категории. Точно так же в IDistributedCache «префикс ключа» будет автоматически введен, таким образом решая такие потенциальные конфликтные проблемы.

В конструкторе DI вы можете делать такие вещи:

public MyClass(IDistributedCache<GlobalCache> globalCache, IDistributedCache<MyClass> myClassCache) { ... }

«GlobalCache» - это класс, который вам нужно создать, что неудобно ... но я простопытаясь придумать вслух, чтобы кто-то мог предложить альтернативные идеи для решения этой проблемы.

1 Ответ

0 голосов
/ 22 октября 2019

Вы можете реализовать и внедрить IDistributedCacheFactory, а не экземпляр IDistributedCache. Затем в зависимом экземпляре вы вызываете CreateCache метод фабрики, который предоставит вызывающей стороне правильный экземпляр. Что-то вроде

public DependentClass(IDistributedCacheFactory cacheFactory){

   this.cache = cacheFactory.CreateCache("MyApplicationCategory");
}

Я предлагаю не использовать имя класса в префиксе кеша. Если класс будет переименован, вы фактически столкнетесь с отсутствием кэша во всем, что может привести к большой проблеме производительности.

...