По сути, внедрение зависимостей - это просто способ структурирования вашего кода для повторного использования компонентов. Не требует использования контейнера. Это просто означает, что вы переносите любое использование оператора «new» для ваших компонентов в начало вашего приложения. Например, точка входа вашего приложения может выглядеть следующим образом:
IZooDataRepository repository = new SqlZooDataRepository(somehost, someparam);
IMonkeyManager monkeyManager = new MonkeyManager(repository);
IZebraManager zebraManager = new ZebraManager(repository);
ZooProgram program = new ZooProgram(monkeyManager, zebraManager);
program.run();
Эта фаза называется «построение графа объекта». Именно здесь вы связываете объекты, которые знают своих соавторов только как интерфейсы для конкретных реализаций этих интерфейсов.
Эта стартовая проводка может быть довольно длинной и сложной, если у вас есть сотни занятий на практике. Вот почему DI-контейнеры были изобретены: они каким-то образом заменяют код построения графов объектов, например, как это:
Container container = new Container(someconfigurationparameters);
ZooProgram program = (ZooProgram) container.Create(ZooProgram.class);
program.run();
Конфигурация графа объектов, созданного контейнером, обычно выполняется с помощью файлов XML, атрибутов классов или привязок, определенных с помощью кода.