Описание тега dependency-injection
Внедрение зависимостей (DI) - это шаблон проектирования для объектно-ориентированного программирования, включающий динамическое внедрение (вставку) в программный компонент зависимостей (компонентов службы), которые ему необходимы для работы, без необходимости жесткого кодирования зависимым компонентом зависимости от службы.. Это уменьшает связь между зависимым потребителем и услугой.
Ресурсы / справочные вопросы
Если вам нужно общее введение в DI, вам следует обратиться к этому вопросу: что такое внедрение зависимостей?
Если вам нужно введение нетехнического характера, вы можете обратиться к этому вопросу: Как объяснить инъекцию зависимостей 5-летнему ребенку.
Если вы хотите понять взаимосвязь между DI и инверсией управления (IoC), см. Инверсия управления <Внедрение зависимостей.
Общие рекомендации по написанию кода, дружественного к DI, без контейнера DI, см. В "дружественной" библиотеке Dependency Inject (DI).
Если вам интересно, почему вы должны использовать контейнер DI (он же ioc-контейнер) вместо DI для бедняков, см. Зачем мне нужен контейнер IoC, а не простой код DI?
Если вам интересно, что такое корень композиции, см. Что такое корень композиции в контексте внедрения зависимостей.
Для потенциальных недостатков использования DI см Каковы минусы использования инъекции зависимостей?
Внедрение зависимостей и инверсия управления тесно связаны. Разница между ними обсуждается в разделе где-именно-разница-между-ioc-and-di.
Также можно прочитать базовое здесь: Внедрение зависимостей для начинающих - 1
Преимущества внедрения зависимостей
- Разделение проблем.
- Шаблонное сокращение кода в классах приложений, потому что вся работа по инициализации зависимостей выполняется компонентом инжектора.
- Настраиваемые компоненты позволяют легко расширять приложение.
- Модульное тестирование - это просто с имитацией объектов.
Недостатки внедрения зависимостей
- При чрезмерном использовании это может привести к проблемам с обслуживанием, так как влияние изменений известно во время выполнения.
- Внедрение зависимостей скрывает зависимости классов обслуживания, которые могут привести к ошибкам времени выполнения, которые были бы обнаружены во время компиляции.