Просто продлить @ ответ Энди
Dependency Injection является одной из форм Dependency Inversion Principle
, чтобы достичь развязки зависимостей (как правило, находится в многоуровневой архитектуре), DI обычно используется для конкретизации сценарии, такие как базовые новые() и шаблоны, подобные методу Factory. В дополнение к возможности каждый раз вводить новый экземпляр зависимостей (например, как на заводе), контейнеры также могут быть настроены для ввода именованных экземпляров, экземпляров singleton и т. Д. - например, контейнеры IoC обычно также берут на себя ответственность за управление жизненными циклами объектов также.
Один из возможных «сдвигов мышления» заключается в том, что зависимости теперь потенциально становятся общедоступными для конкретных классов, поскольку DI обычно вводит через конструкторы или публичные свойства Get/Set. Это может показаться странным, если вы привыкли использовать инкапсуляцию OO, где зависимости класса рассматриваются как реализация и должны быть скрыты от сигнатур метода «снаружи» i.e. class. Однако, реализуя разделение класса Interface/Concrete (как вы должны, не только для развязки, но и для тестирования/издевательства), методы инжекции конструкторов/свойств не будут находиться на интерфейсе, поэтому инкапсуляция снова будет на месте.
Re: «Выполнение DI вручную» без единства и т.д.
Что вам нужно будет сделать, это закодировать свой IoC контейнер, который затем отвечает за «построения» экземпляры классов - в течение каждого «build up», вы сканируете класс на зависимости (которые настроены в контейнере, например, по конфигурации, по атрибутам или просто по соглашению, например, все общедоступные настраиваемые свойства или любые параметры класса в конструкторе будут считаться быть зависимостями).Затем вы создадите (если необходимо) и введете этот экземпляр «зависимости» на объект (например, используя отражение). А затем рекурсивно, все зависимости этих зависимостей должны быть созданы и т. Д. Затем вам также потребуется обеспечить управление продолжительностью жизни для каждого из объектов, например. Синглтоны и т. Д.
Спасибо за ответ Энди. Должен ли я тогда быть прав, заявляя, что вложение зависимостей в контексте представлений и моделей просмотра используется для «развязки» представления из его основной модели просмотра? – user823486
Может оказаться полезным немного больше контекста. Мы говорим о WPF/Silverlight или о чем-то еще? –
Привет. Я ввожу DI в контексте WPF. – user823486