2010-03-18 8 views
6

J'ai mis à jour un projet vers VS2010 et MVC2 à partir de VS2008 et MVC1. Je rencontre des problèmes avec Ninject ne pas trouver contrôleurs dans les zonesNinject 2 et MVC 2.0

Voici mon fichier Global.asax.cs:

namespace Website 
{ 
// Note: For instructions on enabling IIS6 or IIS7 classic mode, 
// visit http://go.microsoft.com/?LinkId=9394801 

public class MvcApplication : NinjectHttpApplication 
{ 
    public static StandardKernel NinjectKernel; 

    public static void RegisterRoutes(RouteCollection routes) 
    { 
     routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 

     routes.MapRoute(
      "Balance", 
      "Balance/{action}/{month}/{year}", 
      new { controller = "Balance", action = "Index", month = DateTime.Now.Month, year = DateTime.Now.Year } 
     ); 

     routes.MapRoute(
      "Default",            // Route name 
      "{controller}/{action}/{id}",       // URL with parameters 
      new { controller = "Login", action = "Index", id = "" } // Parameter defaults 
     ); 

    } 

    /* 
    protected void Application_Start() 
    { 
     AreaRegistration.RegisterAllAreas(); 

     RegisterRoutes(RouteTable.Routes); 

     // initializes the NHProfiler so you can see what is going on with your queries 
     HibernatingRhinos.Profiler.Appender.NHibernate.NHibernateProfiler.Initialize(); 
    } 
    */ 

    protected override void OnApplicationStarted() 
    { 
     RegisterRoutes(RouteTable.Routes); 
     AreaRegistration.RegisterAllAreas(); 
     RegisterAllControllersIn(Assembly.GetExecutingAssembly()); 
    } 

    protected void Application_Error(object sender, EventArgs e) 
    { 
     var errorService = NinjectKernel.Get<IErrorLogService>(); 
     errorService.LogError(HttpContext.Current.Server.GetLastError().GetBaseException(), "AppSite"); 
    } 

    protected override IKernel CreateKernel() 
    { 
     if (NinjectKernel == null) 
     { 
      NinjectKernel = new StandardKernel(new ServiceModule()); 
     } 

     return NinjectKernel; 
    } 
} 

public class ServiceModule : NinjectModule 
{ 
    public override void Load() 
    { 
     Bind<IHelper>().To<Helper>().InRequestScope(); 
     Bind<IErrorLogService>().To<ErrorLogService>(); 

     Bind<INHSessionFactory>().To<NHSessionFactory>().InSingletonScope(); 
     Bind<ISessionFactory>().ToMethod(ctx => 
             ctx.Kernel.Get<INHSessionFactory>().GetSessionFactory()) 
           .InSingletonScope(); 

     Bind<INHSession>().To<NHSession>(); 
     Bind<ISession>().ToMethod(ctx => ctx.Kernel.Get<INHSession>().GetSession()); 
    } 
} 
} 

dans les contrôleurs Accès/dossier Contrôleurs fonctionne bien, mais l'accès à des contrôleurs dans un/zones/membre/contrôleur lance l'erreur suivante:

Server Error in '/' Application. 

Cannot be null 
Parameter name: service 

Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code. 

Exception Details: System.ArgumentNullException: Cannot be null 
Parameter name: service 

Source Error: 

An unhandled exception was generated during the execution of the current web request. Information regarding the origin and location of the exception can be identified using the exception stack trace below. 

Stack Trace: 
[ArgumentNullException: Cannot be null 
Parameter name: service] 
Ninject.ResolutionExtensions.GetResolutionIterator(IResolutionRoot root, Type service, Func`2 constraint, IEnumerable`1 parameters, Boolean isOptional, Boolean isUnique) +193 
Ninject.Web.Mvc.NinjectControllerFactory.GetControllerInstance(RequestContext requestContext, Type controllerType) +41 
System.Web.Mvc.DefaultControllerFactory.CreateController(RequestContext requestContext, String controllerName) +66 
System.Web.Mvc.MvcHandler.ProcessRequestInit(HttpContextBase httpContext, IController& controller, IControllerFactory& factory) +124 
System.Web.Mvc.MvcHandler.BeginProcessRequest(HttpContextBase httpContext, AsyncCallback callback, Object state) +50 
System.Web.Mvc.MvcHandler.BeginProcessRequest(HttpContext httpContext, AsyncCallback callback, Object state) +48 
System.Web.Mvc.MvcHandler.System.Web.IHttpAsyncHandler.BeginProcessRequest(HttpContext context, AsyncCallback cb, Object extraData) +16 
System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +8771488 
System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +184 

Version Information: Microsoft .NET Framework Version:4.0.30128; ASP.NET  Version:4.0.30128.1 

l'URL de cette demande est/membre/contrôleur /, Si je change l'URL trop/contrôleur les feux de contrôleur mais je reçois une erreur que le système ne peut pas trouver la Vue sur le chemin/Vues

Quand il faut regarder dans/Zone/Membres/Vues

J'ai soit fait quelque chose de mal dans la mise à niveau ou je manque quelque chose bt je ne peux pas comprendre ce que. J'ai essayé de comprendre cela pendant 3 jours ...

+0

Je reçois la même erreur en utilisant le château de Windsor. –

+0

@Carles bon à savoir ce n'est pas seulement moi –

+0

Vous devriez être en mesure de définir un point d'arrêt sur NinjectControllerFactory.GetControllerInstance, pourriez-vous vérifier l'URL de la demande et faire un rapport? –

Répondre

1

Mise à jour du noyau, je viens de commettre une solution: http://github.com/ninject/ninject.web.mvc

-Ian

+0

@Ian merci pour cela, je vais essayer de vérifier ce week-end si je peux trouver du temps. –

+0

Le lien correct est http://github.com/ninject/ninject.web.mvc -sorry Je ne peux pas modifier. –

Questions connexes