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