Де знайти найпростіше пояснення dependency injection паттерна

Стосовно до PHP - ось найкраща книга про шаблони (і не тільки), яку я бачив PHP. Об'єкти, шаблони і методики програмування від Мет Зандстра.

Порядок прочитання рекомендую наступний: ФріманФріман, потім Мет Зандстра, і на десерт Фаулера P of EAA.

UPD:
Важливо відрізняти патерн Dependency Injection від Dependency Injection Container.
Найпростіший приклад впровадження залежності:

Найпростіший приклад ігнорування явного впровадження (для такого коду важко писати unit-тести, його важче розуміти і правити):

Відмінний (і легкий) приклад DIC - це pimple:

Раджу прочитати і зрозуміти його вихідні коди, щоб переконатися, що в DIC (у всякому разі для PHP) немає ніякої магії. Перша версія була всього

100 рядків. Необхідно також відзначити, що клас Session використовує шаблон Dependency Injection, явно визначаючи свою залежність від SessionStorage. А контейнер робить лише правильну зв'язку.

І так, контейнер сам по собі можна використовувати як service locator, якщо до нього, наприклад, є глобальний доступ. Але це дуже погана практика, тому що якщо щось звертається до сервіс локатору, то формально воно починає залежати відразу від всіх компонентів системи.

dllweb. DI - це насправді дуже просто. Берете і явно (ключове слово саме явно) передаєте залежності в код, який їх вимагає. Через параметри функції / методу або через конструктор. А DIC - це про те, як цей процес автоматизувати / універсалізуватися на рівні сервісів веб-додатки. Тобто у вас є купа сервісів, кожен явно визначає, від яких інших сервісів він залежить (через параметри конструктора). А DIC вміє створювати екземпляри сервісів, скармливая їм екземпляри тих сервісів, від яких вони залежать.

Де знайти найпростіше пояснення dependency injection паттерна