Инверсия управления (IoC) — это шаблон проектирования, при котором поток выполнения программы контролируется фреймворком, а не кодом приложения. То есть каркас вызывает ваш код, а не наоборот.
Внедрение зависимостей (DI) — это конкретная реализация принципа IoC, при которой зависимости объекта предоставляются извне, а не создаются самим объектом. Это достигается путем передачи зависимостей через конструктор, сеттеры или интерфейсы.
Таким образом, DI — это способ достижения IoC.
Основные различия можно представить в виде таблицы:
| Характеристика | Инверсия управления (IoC) | Внедрение зависимостей (DI) |
|---|---|---|
| Концепция | Общий принцип делегирования управления фреймворку. | Конкретный способ предоставления зависимостей объекту. |
| Фокус | Поток выполнения программы. | Связывание зависимостей между объектами. |
| Способ достижения | Может быть реализован различными способами (шаблон "Стратегия", шаблон "Фабричный метод", Service Locator и т.д.) | Один из способов реализации IoC. |