2010-04-01 4 views
1

Я загрузил довольно новые источники Ninject 2.0 и Ninject.Web.Mvc (таргетинг на mvc2) сегодня и успешно их создал против .NET 4 (настройка выпуска). При попытке запустить приложение с использованием Ninject 2.0 я продолжаю получать 404 ошибки, и я не могу понять, почему.Это 404 кажется неизбежным - что я делаю неправильно? [Ninject 2.0 с ASP.NET MVC 2 на .NET 4]

Это мой Global.asax.cs (немного shortified, для краткости):

using ... 
using Ninject; 
using Ninject.Web.Mvc; 
using Ninject.Modules; 

namespace Booking.Web 
{ 
    public class MvcApplication : NinjectHttpApplication 
    {   
     protected override void OnApplicationStarted() 
     { 
      Booking.Models.AutoMapperBootstrapper.Initialize(); 
      RegisterAllControllersIn(Assembly.GetExecutingAssembly()); 
      base.OnApplicationStarted(); 
     } 

     protected void RegisterRoutes(RouteCollection routes) 
     { 
      ... 
      routes.MapRoute(
       "Default", 
       "{controller}/{action}/{id}", 
       new { controller = "Entry", action = "Index", id = "" } 
      );  
     } 

     protected override IKernel CreateKernel() 
     { 
      INinjectModule[] mods = new INinjectModule[] {...}; 
      return new StandardKernel(mods); 
     } 
    } 
} 

EntryController существует, и имеет Index метод, который просто делает return View(). Я отлаживал и проверял, что выполняется вызов RegisterAllControllersIn(). Я также пытался использовать Phil Haacks Routing debugger, но я все еще получаю 404.

Что мне нужно сделать, чтобы найти причину этого?

ответ

0

Зарегистрированы ли ваши маршруты? Вызывается ли это из базового класса?

Также убедитесь, что вы правильно зарегистрировали свои контроллеры . Я не знаю, как это ожидает фабрика контроллера Ninject, но для этого может потребоваться определенное имя или что-то еще.

+0

В Ninject 1.5 это было сделано автоматически с помощью 'NinjectHttpApplication', который я наследую. Я взглянул на сборку в Reflector и не нашел никакого вызова функции registerRoutes() в этой версии, но я не уверен, что могу сделать это сам. Где я могу получить «RouteTable» в качестве аргумента? –

+0

Блестящий! Я еще больше изучил метод 'Application_Start()' в 'NinjectHttpApplication' и заметил, что там есть привязка для' RouteCollection'. Добавление простого 'RegisterRoutes (Kernel.Get ());' к моему методу init разрешило проблему. Благодаря! –

 Смежные вопросы

  • Нет связанных вопросов^_^