Я только что сделал File -> New Project прошлым вечером над новым проектом. Ах,
запах зеленых полей.
Я использую только что выпущенный ASP.NET MVC 2 (т.е. без предварительного просмотра или выпуска)
кандидат, реальная вещь), и думал, что я получу хорошее начало
используя Ninject 2 (также выпущенную версию) с расширениями MVC. я
скачал проект расширений MVC, открыл его в VS2008Sp1, собрал
это в режиме выпуска, а затем пошел в папку mvc2 \ build \ release
и скопировал Ninject.dll и Ninject.Web.Mvc.dll оттуда в
Папка «Библиотеки» в моем проекте (чтобы я мог их
контроль исходного кода и всегда иметь правильную версию везде). Я не
включить соответствующие XML-файлы - я должен? Они просто обеспечивают
intellisense или какая-то другая функция? Не большое дело, я верю.
Во всяком случае, я следовал самым последним советам, которые только мог найти; я
ссылался на библиотеки DLL в моем проекте MVC2, а затем приступил к работе
Global.asax.cs. Сначала я сделал это наследовать от NinjectHttpApplication. я
удалил метод Application_Start () и вместо этого переопределил OnApplicationStarted (). Вот этот метод:
protected override void OnApplicationStarted()
{
base.OnApplicationStarted();
AreaRegistration.RegisterAllAreas();
RegisterRoutes(RouteTable.Routes);
// RegisterAllControllersIn(Assembly.GetExecutingAssembly());
}
И я также последовал совету VS и реализовал CreateKernel
метод:
protected override Ninject.IKernel CreateKernel()
{
// RegisterAllControllersIn(Assembly.GetExecutingAssembly());
return new StandardKernel();
}
Вот и все. Никаких других изменений в проекте.
Вы заметите, что метод RegisterAllControllersIn () прокомментирован
в двух местах выше. Я решил, что могу запустить его в трех разных
комбинации, все с их причудливыми побочными эффектами;
- Запуск, как указано выше.
Затем мне представляется стандартная страница "Welcome to ASP.NET MVC" в
вся его слава. Однако после того, как эта страница правильно отображается в
браузер, VS показывает мне исключение, которое было брошено. Это бросает в
NinjectControllerFactory.GetControllerInstance (), который был вызван
со значением NULL в параметре controllerType. Обратите внимание, что это
происходит после рендеринга главной страницы - я понятия не имею, почему
вызывается снова, и с помощью точек останова я уже определил, что
GetControllerInstance () был успешно вызван для
HomeController. Почему этот новый вызов с controllerType равен нулю? я
действительно понятия не имею. Нажатие F5 в это время возвращает меня к
браузер, нареканий нет.
- Раскомментирование метода RegisterAllControllersIn () в
CreateKernel ()
Это то, где вещи начинают становиться все более забавными. Теперь я получаю 404
ошибка. Иногда я также получал ArgumentNullException на
RegisterAllControllersIn (), но это довольно редко, и у меня есть
не смог воспроизвести его.
- Раскомментирование метода RegisterAllControllers () в
OnApplicationStarted ()
(и добавление комментария обратно в CreateKernel ())
В результате получается поведение, которое выглядит точно так же, как в пункте 1.
Так что, чтобы не было вечности - есть ли точный шаг за шагом?
руководство по настройке проекта MVC 2 с Ninject 2 (оба не бета
выпускать версии), чтобы получить контроллеры, предоставляемые Ninject? из
Конечно, я тогда начну предоставлять некоторые реальные вещи для инъекций
(например, объекты и репозитории ISession, логгеры и т. д.), но я подумал
Я бы получил это работает в первую очередь.
Любая помощь будет высоко оценена!
(также опубликовано в Ninject Google Group)