При создании API отдыха я наткнулся на создание Кэшированного репозитория на основе этой статьи .
Создание CachedRepository с помощью паттерна стратегии
Мне понравилась идея, потому что код казался красивым и сухим.Поэтому я пошел и дал ему шанс, и реализация была довольно хорошей.
Однако теперь я хочу подключить свой DI (стандартный Microsoft DI, поставляемый с ASP.Net Core и ничего особенного), и я сталкиваюсь там с некоторыми проблемами.
В основном проблема в том, что яу меня несколько реализаций одного и того же интерфейса, и кэшированная реализация использует ссылку на прямую реализацию следующим образом:
public class CachedArticleRepository : IArticleRepository
{
public CachedArticleRepository(IArticleRepository article, IMemoryCache cache)
{
_article = article;
_cache = cache;
}
}
public class ArticleRepository : IArticleRepository
{
public ArticleRepository(IAmbientContextLocator locator)
{
_locator = locator;
}
}
Я использую его в своем сервисе (как описано в статье) следующим образом:
public class DivisionService : IDivisionService
{
public DivisionService(IArticleRepository article)
{
_article = article;
}
}
Теперь у меня вопрос, как я могу настроить DI, чтобы не кэшированный вариант использовался для построения кэшированного репозитория, а кэшированный репозиторий - для всего остального?