Интеграция Castle Monorail и Ninject 2 - PullRequest
1 голос
/ 24 мая 2011

Я хочу использовать Ninject 2 на замковой монорельсовой дороге. Ища в гугле, я ничего не нашел по этому поводу.

Я знаю, что есть Windsor, который волшебным образом может интегрироваться с монорельсом, так же, как Ninject (с расширением MVC) с ASP.NET MVC.

Какие шаги мне нужно сделать, чтобы интегрировать DI-фреймворк (кроме Windsor) с Monorail? (любая ссылка на сайт, учебник или пример кода (желательно с использованием Ninject 2))

Кстати, я использую C #

1 Ответ

2 голосов
/ 24 мая 2011

Не думаю, что есть какая-либо документация по этому поводу, но на самом деле все довольно просто. В этом нет магии. Поскольку MonoRail и Windsor - это совершенно разные проекты, все, что вам нужно сделать, это посмотреть, как они интегрируют , а затем сделать то же самое для Ninject вместо Windsor.

Конкретнее, начните с MonoRailFacility , который является корнем интеграции. Вместо Windsor вы должны использовать модуль Ninject. Обратите внимание, что он регистрирует некоторые компоненты: IControllerTree, IWizardPageFactory и т. Д. Наиболее важным является IControllerFactory, который позволяет разрешать контроллеры из контейнера (в вашем случае Ninject). На данный момент вы можете оставить все остальные значения по умолчанию (например, IFilterFactory / DefaultFilterFactory) и применять их по мере необходимости (т.е. когда вам нужно управление контейнерами для фильтров).

Затем вызовите ServiceProviderLocator.Instance.AddLocatorStrategy(new NinjectAccessorStrategy());, где NinjectAccessorStrategy - это реализация IAccessorStrategy, которая возвращает ядро ​​Ninject в виде Castle.Core.IServiceProviderEx (что является ничем иным, как тривиальным расширением System.IServiceProvider). Поскольку ядро ​​Ninject уже реализует IServiceProvider, написать адаптер для IServiceProviderEx.

тривиально.
...