2010-04-01 3 views
1

J'ai téléchargé les sources assez récentes Ninject 2.0 et Ninject.Web.Mvc (ciblage mvc2) aujourd'hui, et les a construits avec succès .NET 4 (configuration de la version). Lorsque j'essaie d'exécuter une application avec Ninject 2.0, je continue à recevoir des erreurs 404 et je n'arrive pas à comprendre pourquoi.Cette 404 semble inévitable - qu'est-ce que je fais mal? [Ninject 2.0 avec ASP.NET MVC 2 sur .NET 4]

Ceci est mon Global.asax.cs (un peu shortified, par souci de concision):

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); 
     } 
    } 
} 

Le EntryController existe et a une méthode Index qui fait simplement un return View(). J'ai débogué, et vérifié que l'appel à RegisterAllControllersIn() est exécuté. J'ai également essayé d'utiliser Phil Haacks Routing debugger mais je reçois toujours un 404.

Que dois-je faire pour trouver la cause?

Répondre

0

Vos itinéraires sont-ils enregistrés? Est-ce qu'on l'appelle de la classe de base? Assurez-vous également que vous enregistrez vos contrôleurs correctement. Je ne sais pas comment l'usine de contrôleur de Ninject l'attend, mais cela pourrait nécessiter un nom spécifique ou quelque chose du genre.

+0

Dans Ninject 1.5, cela a été fait automatiquement par le 'NinjectHttpApplication' dont j'ai hérité. J'ai jeté un coup d'oeil à l'assemblage dans Reflector, et je n'ai trouvé aucun appel à 'RegisterRoutes()' dans cette version, mais je ne suis pas sûr de pouvoir en faire un moi-même. Où puis-je obtenir le 'RouteTable' dont j'ai besoin en tant qu'argument? –

+0

Brillant! J'ai examiné la méthode 'Application_Start()' dans 'NinjectHttpApplication' encore plus près, et j'ai remarqué qu'il y avait une liaison pour' RouteCollection' là. Ajouter un simple 'RegisterRoutes (Kernel.Get ());' à ma méthode init a résolu le problème. Merci! –

Questions connexes