У багатьох статтях по всьому Інтернету терміни Принцип інверсії контролю та залежності залежно змішуються і використовуються як синоніми (подальше плутанину застосовується за допомогою інструментів, які називаються "DI-контейнери" та "контейнери IoC"). Стаття у Вікіпедії робить гарну роботу, намагаючись пояснити, що IoC - це не те саме, що DI:
інверсія управління (IoC) описує дизайн, в якому написані на замовлення частини комп'ютерної програми отримують потік управління з загальної бібліотеки для багаторазового використання
Отже, DIP полягає в тому, щоб ваші модулі залежали від абстракцій, а не конкретних реалізацій.
І IoC збирається контролювати потік вашої програми в окремий модуль. І одна з речей, за допомогою якої ви можете зробити цей модуль, - це вирішити залежності під час виконання.
Ця різниця здається справедливою, але я ніколи не бачив, щоб хтось згадував про будь-які інші програми принципу IoC, окрім вирішення залежності. Визначення Вікіпедії досить широке, і, схоже, ви могли зробити набагато більше з модулем, який може робити дзвінки у ваш спеціальний код на основі його конфігурації та певної внутрішньої логіки.
Отже, ось кілька питань, яких я поки не можу зрозуміти:
- Яке фактичне відношення між IoC та DIP? Чи завжди IoC служить засобом впровадження DIP?
- Чому інструменти для вирішення залежності називаються як DI-, так і IoC-контейнерами? Це означає, що DI та IoC - це одне і те ж.
Примітка . Це запитання не є дублікатом у чому різниця між DI та IoC , оскільки останній запитує про ін'єкцію залежності, а не про інверсію залежності.