Кто-нибудь знает хорошее руководство по работе Ninject 2 в ASP.NET MVC?

Я борюсь с документацией, чтобы понять, что именно мне нужно. Документация (насколько я понимаю) в любом случае для 1.5.

Примечание: я не хочу расширять NinjectHttpApplication

Я настроил его для использования NinejctControllerFactory в Application_Start(), но получаю исключение нулевой ссылки в KernelContainer.Kernel, когда он пытается создать контроллер. Где мне настроить ядро, если я не расширяю NinjectHttpApplication?


person joshcomley    schedule 07.06.2009    source источник
comment
По какой причине вы не хотите расширять NinjectHttpApplication?   -  person Peter Meyer    schedule 17.06.2009
comment
Я уже расширяю другое пользовательское приложение HttpApplication.   -  person joshcomley    schedule 17.06.2009


Ответы (4)


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

http://www.kevinrohrbaugh.com/blog/2009/8/7/using-ninject-2-with-aspnet-mvc.html

person Dale Ragan    schedule 12.08.2009
comment
Это по-прежнему основано на производном от NinjectHttpApplication. - person Peter Meyer; 13.08.2009
comment
Когда он говорит «расширить», он имеет в виду «выводить/наследовать»? - person Dale Ragan; 13.08.2009

Поскольку вы уже расширяете другой класс, производный от HttpApplication, я думаю просто скопировать соответствующий исходный код из класса NinjectHttpApplication в ваш расширенный класс HttpApplication. Вместо того, чтобы вырезать и вставлять его, просто посмотрите на источник для NinjectHttpApplication в проекте расширения Ninject2 Ninject.Web.Mvc здесь.

Я бы специально скопировал материал в методах Application_Start() и Application_Stop(). Другие способы регистрации контроллеров хороши, но вы можете зарегистрировать свои контроллеры по своему усмотрению. Вы заметите, что в Application_Start() ядро ​​создается путем вызова чистой виртуальной функции CreateKernel() — вы можете просто создать свое ядро ​​прямо здесь. Кроме того, обратите внимание на наличие свойства Kernel в классе NinjectHttpApplication — я бы также скопировал его в ваш собственный класс. Может показаться, что целью здесь является то, чтобы класс, производный от HttpApplication, эффективно служил в качестве контейнера ядра.

Отказ от ответственности: я не пробовал это, чтобы увидеть, работает ли это, хотя я скоро буду. Я использовал Ninject 1.x в веб-проекте и намерен в ближайшем будущем перейти на Ninject 2; однако я, вероятно, смогу получить непосредственно из NinjectHtppApplication. Удачи!

person Peter Meyer    schedule 18.06.2009

Отсутствие возможности наследования от NinjectHttpApplication не имеет большого значения. Это не делает слишком много, это очень удобно. Предложение Питера Мейера — правильный путь. Просто ознакомьтесь с исходным кодом здесь . Однако вам придется наследовать от IHaveKernel.

person J.R. Garcia    schedule 14.09.2009

Вы все равно должны вставить код, который у вас есть, чтобы люди могли видеть, где вы могли ошибиться.

Я думаю, что этот код должен быть помещен в ваш Application_Start:

ControllerBuilder.Current.SetControllerFactory(typeof(NinjectControllerFactory));
KernelContainer.Kernel = new StandardKernel(
    new AutoControllerModule(Assembly.GetExecutingAssembly();
);
person Talljoe    schedule 07.06.2009
comment
Я в значительной степени дал свой код, и все, что у меня есть, это установка фабрики контроллеров. Это не казалось слишком достойным для одной строки! Кроме того, это для v1 Ninject. Меня интересует v2. - person joshcomley; 08.06.2009
comment
На самом деле я не вижу никакого кода, подробной трассировки стека или чего-то еще. Решение кажется очевидным, поэтому я хочу убедиться, что вы, по крайней мере, делаете очевидное. Я пропустил часть Ninject 2 (видел только 1,5 в теле), поэтому я обновил свой ответ тем, что я считаю правильным для Ninject 2. - person Talljoe; 08.06.2009