Как использовать / настраивать Unity Container IOC в моей ситуации - PullRequest
1 голос
/ 14 января 2010

У меня возникли проблемы с внедрением Unity IOC в мой проект, который читает из файла конфигурации.

Вот что у меня есть

1) Классная библиотека A

2) ClasslibraryB, который ссылается на ClasslibraryA

3) Приложение Winforms, которое ссылается на ClasslibraryB

Примечание: приложение SomeOther будет ссылаться на ClassLibraryA, например. веб-сервис.

ClasslibraryA необходимо будет настроить для IOC в зависимости от того, где он используется. например. IDataSource будет другим, если он вызывается в веб-службе и когда он вызывается из локального приложения.

ClasslibraryB также будет иметь свой собственный набор зависимостей, которые будут внедряться основным приложением, в данном случае, приложением winforms. ClasslibraryB будет создавать множество объектов ClasslibraryA в цикле.

Приложение Winforms будет содержать конкретную реализацию реализации зависимостей ClassLibraryB, и здесь должен вызываться Container.Configure?

Мои вопросы,

Когда и где я могу вызвать Container.Configure в приложении?
Нужен ли дочерний контейнер для всех уровней / слоев суббиблиотеки?
Должен ли classlibraryB или winforms реализовать конкретный класс для ClasslibraryA для внедрения в classlibraryA? Должен ли я сгруппировать конфигурацию IOC каждого уровня / уровня в другое имя «Контейнера» в файле конфигурации?

Ответы [ 2 ]

3 голосов
/ 14 января 2010

Каждое приложение владеет отдельным контейнером и отвечает за настройку этого экземпляра контейнера. Конфигурация и вызов для разрешения должны происходить как можно ближе к точке входа приложения. Это называется Композиционный корень .

Ваше приложение Windows Forms должно владеть, настраивать и разрешать контейнер в своем загрузочном коде. То, что могут быть другие приложения, которые также используют ClassLibraryA, совершенно не имеет к этому отношения.

Веб-служба должна иметь другой контейнер и настроить его в соответствии со своими потребностями. Он ничего не знает о приложении Windows Forms.

Подробнее о корнях композиции:

Все библиотеки должны быть полностью Независимо от контейнера DI , чтобы вы могли использовать любой контейнер (и любой экземпляр контейнера) для соединения всех зависимостей.

Подробнее см. Здесь:

Как вы можете заметить, это общие принципы, которые применяются ко всей DI, а не только к Unity.

0 голосов
/ 14 января 2010

Вы должны вызвать Container.Configure в самом начале приложения, но ClassLibraryA должен получить зависимость вручную, возможно, с вызываемым WebMethod, чтобы вызвать (или запросить у ioc экземпляр) правильный тип

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...