Лучшие практики внедрения зависимостей

Это вопрос о том, как лучше всего делать DI, чтобы он не был привязан к какой-либо конкретной структуре DI / IoC, потому что, ну, фреймворк следует выбирать на основе шаблона и практики, а не наоборот, не так ли?

Я делаю проект, в котором репозиторий должен быть внедрен в сервисы, сервис может потребовать несколько репозиториев, и мне любопытны плюсы и минусы следующих подходов:

  1. Внедрение репозиториев в конструктор сервиса

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

     открытый класс SomeService: BaseService, ISomeService 
     {
    public SomeService (IServiceContext serviceContext) 
     { 
    this.serviceContext = serviceContext; 
    } 
     
    public void DoThis () 
     {
     // Сделайте что-нибудь с serviceContext. repository1 
    } 
    public void DoThat () 
     {
     // Сделайте что-нибудь с serviceContext.repository1 и serviceContext.repository2 
    } 
    } 
     
  3. Внедрение в методы, которые в них нуждаются

     открытый класс SomeService: ISomeService 
     {
    public void DoThis (IRepository1 repository1) 
     {
     // Сделайте что-нибудь с repository1 
    } 
    public void DoThat (IRepository1 repository1, IRepository2 repository2) 
     {{{ 1}} // Сделайте что-нибудь с репозиторием1 и репозиторием2 
    } 
    } 
     

Некоторые указатели будут оценены, кроме того, какие аспекты я должен учитывать при оценке подобные альтернативы?

9
задан Yellowmoon 5 October 2011 в 17:59
поделиться