- Когда следует использовать инъекцию свойств?
- Должен ли я использовать стандартную инсталляцию конструктора, если создание экземпляра полностью контролируется?
- Правильно ли, что с использованием инъекции конструктора я пишу контейнер-агностический код?
ответ
Когда следует использовать инъекции свойств?
Вы должны использовать вложение свойств, если зависимость действительно необязательна, если у вас есть локальное значение по умолчанию, или когда граф объекта содержит циклическую зависимость.
Свойство 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 и его основных моделей и принципов.
- 1. Когда использовать инъекцию зависимостей
- 2. Когда использовать инъекцию зависимостей? Когда не нужно?
- 3. Определение того, когда использовать инъекцию зависимостей
- 4. Правильно использовать инъекцию зависимостей
- 5. Как использовать инъекцию зависимостей?
- 6. как использовать инъекцию dll?
- 7. Когда использовать атрибуты вместо свойств?
- 8. Как правильно использовать инъекцию зависимостей?
- 9. Когда вы используете инъекцию зависимостей?
- 10. Когда и где использовать инъекцию зависимостей с помощью Guice?
- 11. GWT MVP, когда и как использовать инъекцию зависимостей
- 12. Невозможно использовать инъекцию без наблюдателя
- 13. Как правильно использовать инъекцию зависимостей?
- 14. Когда нужно использовать вызов другого vs, когда использовать инъекцию зависимости метода
- 15. Как сделать инъекцию свойств через аннотацию @Value обязательной?
- 16. Ninject, используя двунаправленную инъекцию свойств для разрешения циклической зависимости
- 17. Невозможно использовать инъекцию с помощью DWR
- 18. Использовать инъекцию пружинной зависимости в модели домена?
- 19. Как использовать инъекцию зависимостей для унаследованного класса?
- 20. Когда использовать файл свойств и когда искать базу данных?
- 21. Почему Unity использует инъекцию свойств при разрешении конкретного типа?
- 22. Как получить инъекцию свойств в Ninject для ValidationAttribute в MVC?
- 23. Вы когда-нибудь делали SQL-инъекцию?
- 24. Как использовать инъекцию зависимостей на Yii2
- 25. Как использовать инъекцию зависимостей в планировщике quartz.net
- 26. Как использовать инъекцию зависимостей в плагине Eclipse
- 27. Как использовать инъекцию зависимостей в JAVA SE?
- 28. Как использовать инъекцию зависимостей в тестах Spek
- 29. Как использовать инъекцию зависимостей с калитки?
- 30. Как использовать инъекцию зависимости, используя ocLazyLoad
Впрыск свойств никогда не следует использовать в сочетании с конструктором по умолчанию, поэтому он должен быть единственным способом построения объекта через контейнер DI. Таким образом, вложение свойств, возможно, может быть использовано, когда у вас слишком много зависимостей, и вам не нужна очень длинная подпись конструктора :) – hB0
@ hB0 это на самом деле очень плохой совет. Если у вас есть конструктор с множеством аргументов, ваш код говорит вам, что вы нарушаете Единый ответственный принцип. Использование свойств не устранит проблему с корнем: ваш класс слишком велик; он должен быть разделен на более мелкие, более сфокусированные классы. – Steven
Вы правы, но это не совет, а правдоподобный случай использования инъекции свойств, если класс уже запутан, иначе всегда лучше использовать инъекцию конструктора. По той же причине я прокомментировал, но не ответил, поскольку это не очень хороший подход. – hB0