Описание тега dependency-injection

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

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

Ресурсы / справочные вопросы

Если вам нужно общее введение в DI, вам следует обратиться к этому вопросу: что такое внедрение зависимостей?

Если вам нужно введение нетехнического характера, вы можете обратиться к этому вопросу: Как объяснить инъекцию зависимостей 5-летнему ребенку.

Если вы хотите понять взаимосвязь между DI и инверсией управления (IoC), см. Инверсия управления <Внедрение зависимостей.

Общие рекомендации по написанию кода, дружественного к DI, без контейнера DI, см. В "дружественной" библиотеке Dependency Inject (DI).

Если вам интересно, почему вы должны использовать контейнер DI (он же ioc-контейнер) вместо DI для бедняков, см. Зачем мне нужен контейнер IoC, а не простой код DI?

Если вам интересно, что такое корень композиции, см. Что такое корень композиции в контексте внедрения зависимостей.

Для потенциальных недостатков использования DI см Каковы минусы использования инъекции зависимостей?

Внедрение зависимостей и инверсия управления тесно связаны. Разница между ними обсуждается в разделе где-именно-разница-между-ioc-and-di.

Также можно прочитать базовое здесь: Внедрение зависимостей для начинающих - 1

Преимущества внедрения зависимостей

  • Разделение проблем.
  • Шаблонное сокращение кода в классах приложений, потому что вся работа по инициализации зависимостей выполняется компонентом инжектора.
  • Настраиваемые компоненты позволяют легко расширять приложение.
  • Модульное тестирование - это просто с имитацией объектов.

Недостатки внедрения зависимостей

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

Связанные шаблоны