Зависимость инъекционного контейнера?Что оно делает? - PullRequest
13 голосов
/ 05 ноября 2011

Я читал о DI, и это кажется достаточно простой концепцией. Что я не получаю, так это контейнер. Скажем на минуту, что я хочу создать свой собственный контейнер. Используются глаголы типа «обнаружить», и я не понимаю, как контейнер «обнаруживает», что создан новый зависимый объект, и знает, как внедрить его зависимости. Мне кажется, что контейнер - это прославленная фабрика.

Может ли кто-нибудь объяснить, как на самом деле реализован контейнер, или, может быть, указать мне на ресурс?

Спасибо!

Ответы [ 2 ]

14 голосов
/ 05 ноября 2011

Это взято из Виндзорской документации

Инверсия управления

Инверсия управления - это принцип, используемый платформами какспособ позволить разработчикам расширять фреймворк или создавать приложения, используя его.Основная идея заключается в том, что фреймворк знает объекты программиста и вызывает их.

Это противоположно использованию API, где код разработчика выполняет вызовы кода API.Следовательно, фреймворки инвертируют управление: за разработку отвечает не код разработчика, а фреймворк делает вызовы, основываясь на каком-то стимуле.

Возможно, вы были в ситуациях, когда вы разрабатывали в свете этогопринцип, даже если вы не знали об этом.

Инверсия контейнера управления

Инверсия контейнера управления использует принцип, изложенный выше, для (в двух словах) управленияклассы.То есть их создание, уничтожение, время жизни, конфигурация и зависимости.Таким образом, классам не нужно получать и настраивать классы, от которых они зависят.Это значительно снижает сцепление в системе и, как следствие, упрощает повторное использование и тестируемость.

Существует некоторая путаница, созданная людьми, которые думают, что «Инверсия управления» является синонимом «Инверсия контейнера управления».Как уже говорилось, инверсия контроля является более широким принципом.

Часто люди думают, что все дело в «инъекции», и сообщают, что это основная цель контейнеров IoC.На самом деле «инъекция» является следствием, средством разъединения, а не основной целью.

2 голосов
/ 05 ноября 2011

Возможно, вы захотите прочитать эту книгу Внедрение зависимостей в .NET ... Я уже прочитал ее и настоятельно рекомендую вам ее прочитать.Сначала он дает хорошее и проницательное объяснение DI, затем показывает код и шаблоны для реальных приложений DI.

Из этой книги и в нескольких словах ...

"DI container is the technology used to support the DI technique" Page 55
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...