Это вопрос о том, как лучше всего делать DI, чтобы он не был привязан к какой-либо конкретной структуре DI / IoC, потому что, ну, фреймворк следует выбирать на основе шаблона и практики, а не наоборот, не так ли?
Я делаю проект, в котором репозиторий должен быть внедрен в сервисы, сервис может потребовать несколько репозиториев, и мне любопытны плюсы и минусы следующих подходов:
Внедрение репозиториев в конструктор сервиса
открытый класс SomeService: ISomeService
{
частный репозиторий IRepository1;
частный репозиторий IRepository22;
общедоступный SomeService (репозиторий IRepository1, репозиторий IRepository2)
{
this.repository1 = repository1;
this.repository2 = repository2;
}
public void DoThis ()
{{ {1}} // Сделайте что-нибудь с репозиторием 1
}
public void DoThat ()
{
// Сделайте что-нибудь с репозиторием 1 и репозиторием 2 {{1} }}
}
Внедрить настраиваемый класс контекста, включающий все, что угодно. сервису может потребоваться ленивое создание экземпляра (IServiceContext будет защищенным полем в BaseService)
открытый класс SomeService: BaseService, ISomeService
{
public SomeService (IServiceContext serviceContext)
{
this.serviceContext = serviceContext;
}
public void DoThis ()
{
// Сделайте что-нибудь с serviceContext. repository1
}
public void DoThat ()
{
// Сделайте что-нибудь с serviceContext.repository1 и serviceContext.repository2
}
}
Внедрение в методы, которые в них нуждаются
открытый класс SomeService: ISomeService
{
public void DoThis (IRepository1 repository1)
{
// Сделайте что-нибудь с repository1
}
public void DoThat (IRepository1 repository1, IRepository2 repository2)
{{{ 1}} // Сделайте что-нибудь с репозиторием1 и репозиторием2
}
}
Некоторые указатели будут оценены, кроме того, какие аспекты я должен учитывать при оценке подобные альтернативы?