2016-10-04 2 views
5
  1. Когда следует использовать инъекцию свойств?
  2. Должен ли я использовать стандартную инсталляцию конструктора, если создание экземпляра полностью контролируется?
  3. Правильно ли, что с использованием инъекции конструктора я пишу контейнер-агностический код?

ответ

9

Когда следует использовать инъекции свойств?

Вы должны использовать вложение свойств, если зависимость действительно необязательна, если у вас есть локальное значение по умолчанию, или когда граф объекта содержит циклическую зависимость.

Свойство Injection, однако, вызывает Temporal Coupling, и при написании приложений Business of Business ваши зависимости никогда не должны быть дополнительными: вместо этого вы должны применять Null Object pattern.

Также вы не должны использовать локальное значение по умолчанию, поскольку это усложняет тестирование, скрывает зависимость и позволяет очень легко забыть настроить зависимость.

Графики объектов не должны иметь циклических зависимостей. Это indication of a problem в вашем дизайне приложения.

Должен ли я использовать стандартную инсталляцию конструктора, если создание экземпляра полностью контролируется?

Да. Инъекция конструктора - лучший способ. Это позволяет легко понять, какие зависимости имеет класс, позволяет сделать необходимые зависимости и предотвращает временную связь.

Я прав, что с использованием инъекции конструктора я пишу контейнер-агностик код?

Это правильно. Инъекция конструктора позволяет отложить решение о том, какую библиотеку DI использовать, и whether at all you use a DI library.

Для более подробного объяснения вышесказанного и многих других, прочитайте книгу Dependency Injection in .NET от Mark Seemann (и я), которая является путеводителем, когда дело доходит до понимания DI и его основных моделей и принципов.

+0

Впрыск свойств никогда не следует использовать в сочетании с конструктором по умолчанию, поэтому он должен быть единственным способом построения объекта через контейнер DI. Таким образом, вложение свойств, возможно, может быть использовано, когда у вас слишком много зависимостей, и вам не нужна очень длинная подпись конструктора :) – hB0

+0

@ hB0 это на самом деле очень плохой совет. Если у вас есть конструктор с множеством аргументов, ваш код говорит вам, что вы нарушаете Единый ответственный принцип. Использование свойств не устранит проблему с корнем: ваш класс слишком велик; он должен быть разделен на более мелкие, более сфокусированные классы. – Steven

+0

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

Смежные вопросы