Привязка к нескольким конкретным реализациям с помощью IOC-фреймворков? - PullRequest
2 голосов
/ 25 ноября 2008

Я относительно знаком с концепциями контейнеров DI / IOC, которые ранее работали над проектами, где их использование уже было на месте. Однако для этого нового проекта не существует фреймворка, и мне нужно выбрать один.

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

Однако существуют ситуации, в которых нам нужно запустить ALL настроенных реализаций. Я просмотрел здесь все посты с тегами IOC и пытаюсь пролистать документацию по основным фреймворкам (пока что рассматриваю Unity, Ninject и Windsor), но документы часто редки, и у меня нет времени проверять источник для всех пакетов.

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

Ответы [ 2 ]

3 голосов
/ 25 ноября 2008

Одна вещь, которая поймала меня в первый раз, когда я пытался разрешить все реализации зарегистрированного типа, заключалась в том, что безымянные (по умолчанию) регистрации типов будут не возвращаться при вызове ResolveAll (). Возвращаются только именованные экземпляры.

Итак:

IUnityContainer container = new UnityContainer();
container.RegisterType<IMyInterface, MyFirstClass>();
container.RegisterType<IMyInterface, MySecondClass>("Two");
container.RegisterType<IMyInterface, MyThirdClass>("Three");

var instances = container.ResolveAll<IMyInterface>();

Assert.AreEqual(2, instances.Count, "MyFirstClass doesn't get constructed");
0 голосов
/ 25 ноября 2008

Так что я как-то пропустил свой первый проход, как-то просматривая Unity ... но я отвечу на свой вопрос.

У Unity есть именно то, что я хотел. http://msdn.microsoft.com/en-us/library/cc440943.aspx

Кроме того, для тех, кто занимается охотой и танцами в МОК, как я, эта ссылка оказалась бесценной. http://blog.ashmind.com/index.php/2008/09/08/comparing-net-di-ioc-frameworks-part-2/

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