Щоб зробити це правильно, спершу треба визначити залежності та ін'єкцію.
- Залежність: будь-який ресурс, необхідний операції.
- Ін'єкція: передача цього ресурсу в операцію, як правило, як аргумент методу.
Рудиментарним прикладом може бути метод, який додає два значення. Очевидно, що цим методам потрібно додати значення. Якщо вони будуть надані, передаючи їх як аргументи, це вже був би випадок введення залежності. Альтернативою було б реалізація операндів як властивостей або глобальних змінних. Таким чином ніяких залежностей не вводитимуть, залежність буде доступна зовні.
Припустимо, ви замість цього використовуєте властивості та називаєте їх A і B. Якщо змінити імена на Op1 та Op2, ви порушите метод Add. Або ваш IDE оновив би всі назви для вас, справа в тому, що метод потребує оновлення, оскільки він має залежність від зовнішніх ресурсів.
Цей приклад є базовим, але ви можете уявити більш складні приклади, коли метод виконує операцію над об'єктом, як зображення, або де він читає з потоку файлів. Ви хочете, щоб метод охопив зображення, вимагаючи, щоб він знав, де він знаходиться? Ні. Ви хочете, щоб метод відкривав сам файл, вимагаючи, щоб він знав, де шукати файл, або навіть знати, що він буде читати з файлу? Ні.
Суть: зменшити функціональність методу до його основної поведінки та відокремити метод від його оточення. Ви отримуєте перше, роблячи друге, ви можете вважати це визначенням ін'єкції залежності.
Переваги: оскільки залежності від середовища методу були усунені, зміни методу не впливатимуть на навколишнє середовище та навпаки. => Додаток стає простішим у обслуговуванні (зміні).