У нас возникла аналогичная потребность в проекте, который использует MediatR и в итоге включил кэширование в конвейер посредника, включая аннулирование кэша, как вы описали.
Основная предпосылка заключается в том, что у нас есть два разных поведения, вставленных вконвейер, один для кэширования ответа на запрос и один для аннулирования кэшированного ответа на запрос от другого запроса.
Существует небольшое взаимодействие между двумя поведениями в том факте, что им нужно обмениватьсяключ кэша для аннулирования правильного запроса.
Недавно я перенес часть этой работы в отдельную библиотеку, которую теоретически можно перенести как есть в любой проект, использующий MediatR.В вашем случае вы можете просто захотеть взглянуть на методы, которые мы использовали здесь, и воссоздать их по мере необходимости.
Вместо того, чтобы повторять все здесь и сейчас, я укажу вам на страницу проекта, где естьнекоторая документация по ссылке Начало работы на домашней странице: https://github.com/Imprise/Imprise.MediatR.Extensions.Caching
На мой взгляд, аннулирование кэша делает весь процесс чрезвычайно простым и понятным, но в некоторых случаях нам требовался более точный контроль над тем, когда происходит аннулирование,В этих случаях другой подход, который мы выбрали, заключается в том, чтобы ввести ICache<TRequest, TResponse> cache
в INotificationHandler
s и затем вызвать _cache.Remove(key);
вручную, если необходимо.Затем из любых ваших запросов следует признать недействительными просто поднять уведомление, которое обрабатывается INotificationHandler
например _mediator.Publish(SomethingUpdated);