установка зависимости по умолчанию без использования стороннего средства разрешения зависимостей - PullRequest
2 голосов
/ 07 июля 2011

Во внешней библиотеке у меня есть контроллер, который требует двух зависимостей хранилища.Конструктор по умолчанию хорошо разрешает эти зависимости, вызывая простую фабрику для создания зависимостей.Я хочу предоставить подписчикам моей библиотеки возможность переопределять любые зависимости, но использовать зависимости по умолчанию, когда они не переопределены.

Так, например,

public class LibraryController {
    public LibraryController(IRepository1 repo1, IRepository2 repo2) {
    }
}

Они могутпереопределить IRepository1, но не IRepository2.Я либо недостаточно понимаю Dependency Injection, либо просто что-то здесь упускаю.

Я не хочу навязывать зависимости Ninject, StructureMap или Unity для создания зависимостей по умолчанию,Как я могу сделать это без этого?

Редактировать: я мог бы просто создать несколько конструкторов на основе разных параметров, но я надеялся на другое решение.

1 Ответ

3 голосов
/ 07 июля 2011

Подход по умолчанию в DI состоит в том, чтобы создать все соответствующие перегрузки . Это легко сделать и не требует дополнительных библиотек или фреймворков. В вашем случае есть только четыре возможных комбинации, так что это не так уж плохо.

Вы можете подумать, что это становится громоздким по мере увеличения количества параметров конструктора, но у вас не должно быть слишком много зависимостей , во-первых.

Как правило, при использовании Constructor Injection лучше выставить только конструктор инъекций и удалить значения по умолчанию. Объединение DI и конструкторов по умолчанию - это запах дизайна, который я называю Bastard Injection . Это редко правильный подход.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...