Ninject для привязки на разных контроллерах - PullRequest
5 голосов
/ 23 июля 2010

Я пытаюсь привязать два конкретных класса к одному интерфейсу. Какую команду я должен использовать в Ninject, чтобы сделать это? Я пытаюсь привязать два конкретных класса к одной интерфейсной базе на контроллере Name. Это возможно? Я полагаю, что в ninject вы используете .When для условных выражений, но там нет учебника, где они показывают, как использовать .When для ninject.

1 Ответ

8 голосов
/ 23 июля 2010

Вот несколько примеров. Ознакомьтесь с исходным проектом Ninject и его подпроектом Tests для различных примеров использования, это лучшая документация для него, тем более что документы еще не были обновлены для v2.

// usage of WhenClassHas attribute
Bind<IRepository>().To<XmlDefaultRepository>().WhenClassHas<PageAttribute>().WithConstructorArgument("contentType", ContentType.Page);
// usage of WhenInjectedInto
Bind<IRepository>().To<XmlDefaultRepository>().WhenInjectedInto(typeof(ServicesController));
Bind<IRepository>().To<XmlDefaultRepository>().WhenInjectedInto(typeof(PageController)).WithConstructorArgument("contentType", ContentType.Page);
Bind<IRepository>().To<XmlDefaultRepository>().WhenInjectedInto(typeof(WidgetZoneController)).WithConstructorArgument("contentType", ContentType.WidgetZone);
// you can also do this
Bind<IRepository>().To<PageRepository>().WhenInjectedInto(typeof(PageController)).WithConstructorArgument("contentType", ContentType.Page);
Bind<IRepository>().To<WidgetZoneRepository>().WhenInjectedInto(typeof(WidgetZoneController)).WithConstructorArgument("contentType", ContentType.WidgetZone);
// or this if you don't need any parameters to your constructor
Bind<IRepository>().To<PageRepository>().WhenInjectedInto(typeof(PageController));
Bind<IRepository>().To<WidgetZoneRepository>().WhenInjectedInto(typeof(WidgetZoneController));
// usage of ToMethod()  
Bind<HttpContextBase>().ToMethod(context => new HttpContextWrapper(HttpContext.Current));

НТН

...