Я просто Зарегистрировал-> Новый Проект вчера вечером на новом проекте. А-ч, запах зеленых полей.
Я использую справедливый выпущенный ASP.NET MVC 2 (т.е. никакой предварительный просмотр или предвыпускная версия, реальная вещь), и думал, что выйду к хорошему началу с помощью Ninject 2 (также выпущенная версия) с расширениями MVC. Я загрузил проект расширений MVC, открыл его в VS2008Sp1, создал его в режиме выпуска, и затем вошел в mvc2\build\release папку и скопировал Ninject.dll и Ninject.Web.Mvc.dll оттуда к папке Libraries на моем проекте (так, чтобы я мог тащить их вокруг в управлении исходным кодом и всегда иметь правильную версию везде). Я не включал соответствующие .xml файлы - должен я? Они просто обеспечивают intellisense или некоторую другую функцию? Не грандиозное предприятие я верю.
Anyhoo, я последовал самому актуальному совету, который я мог найти; я сослался на DLLs в своем проекте 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" стандарта в славе всех it. Однако после того, как эта страница отображена правильно в браузере, VS показывает мне исключение, которое было выдано. Это добавляет NinjectControllerFactory. GetControllerInstance (), который назвали с Нулевым значением в controllerType параметре. Заметьте, что это происходит после того, как Домашняя страница / представляется - я понятия не имею, почему это называют снова, и при помощи точек останова я уже решил, что GetControllerInstance () успешно назвали для HomeController. Почему этот новый вызов с controllerType как пустой указатель? Я действительно понятия не имею. Нажатие F5 в это время забирает меня к браузеру, никакие жалобы там.
Это - то, где материал действительно начинает становиться броским. Теперь я получаю 404 ошибки. Несколько раз я также получил ArgumentNullException на RegisterAllControllersIn () строка, но это довольно редко, и я не смог воспроизвести его.
(И откладывание комментария о том в CreateKernel ())
Результаты в поведении, которое точно походит на это в точке 1.
Таким образом для удержаний от продолжения навсегда - существует ли точное пошаговое руководство о том, как настроить проект MVC 2 с Ninject 2 (обе версии небета-версии) для обеспечивания контроллеров Ninject? Конечно, я затем начну обеспечивать некоторый фактический материал для инжекции (как объекты ISession и репозитории, регистраторы и т.д.), но я думал, что получу эту работу сначала.
Любая справка будет высоко цениться!
(Также отправленный на Ninject Google Group)
Я чувствую себя грязным, отвечая на свой вопрос, но для пользы всех, кто может заблудиться в этом ...
Это не проблема Ninject, На самом деле, похоже, это проблема с Cassini (веб-сервер, встроенный в VS2k8), который обрабатывает эти запросы иначе, чем IIS будет их обрабатывать. Основная причина в том, что приложение получает запрос на favicon.ico, который Cassini отправляет в MVC, а Ninject не знает, как с ним справиться.
Ян Дэвис исправил эту ошибку за впечатляюще короткий промежуток времени, а также рекомендовал добавить маршрут игнорирования, чтобы избежать этой проблемы, особенно во время разработки. Просто добавьте в конфигурацию маршрута следующее:
routes.IgnoreRoute("{*favicon}", new { favicon = @"(.*/)?favicon.ico(/.*)?" });
Надеюсь, это кому-то поможет!