Думайте об этом как о реализации паттерна «инверсия контроля». Я полагаю, ваша проблема в том, что вы так привыкли к этому, что не понимаете, что это так просто.
Давайте начнем с самого начала.
В первые дни программы следовали заданному пути через код. Порядок вызываемых функций был задан программистом.
В интерактивных программах, например В основном ЛЮБАЯ программа, вы не можете сказать, какая функция вызывается в какое время. Просто посмотрите на графический интерфейс или веб-сайт. Вы не можете сказать, в какое время нажимается какая кнопка или ссылка. Таким образом, «контроль» за происходящим больше не в программе, а во внешнем источнике. «Контроль» был инвертирован. Функция больше не «действует», а «слушает». Подумайте о голливудском принципе: «Не звони нам, мы звоним тебе». Слушатель является хорошим примером для реализации этого паттерна.
IoC реализуется с помощью функций или «методов» в «объектно-ориентированном мире» сегодня.
«Внедрение зависимостей» теперь означает то же самое, но не для «методов», которые что-то делают , а для «объектов», которые содержат данные .
Данные больше не являются частью объекта, его удерживающего. Он «вводится» в объект во время выполнения. Чтобы остаться в Голливуде, подумайте о кинозвезде, играющей в гольф, чтобы поговорить о бизнесе, но чтобы поддерживать себя в форме, она вешается, сводя к минимуму свой мышечный вес, и поэтому она может носить только одну булаву за раз. *
Итак, на поле для гольфа ее игра будет сильно зависеть от одного клюшки, которую она несет.
К счастью для нее, есть кедди, которые несут множество клубов одновременно, а также знают, какой клуб использовать в какое время. Теперь она не зависит от своей ограниченной возможности носить клюшки для гольфа. «Не думайте о конкретном клубе, который мы носим, мы знаем их все и дадим вам нужный в нужный момент».
Звезда фильма - это объект, а клюшки для гольфа - члены объекта. Это внедрение зависимости.