2010-03-18 13 views
6

He actualizado un proyecto a VS2010 y MVC2 de VS2008 y MVC1. Estoy teniendo problemas con Ninject no encontrar los controladores dentro de las ÁreasNinject 2 y MVC 2.0

Aquí está mi archivo 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()); 
    } 
} 
} 

accede a los controladores dentro de los Controladores/carpeta funciona bien, pero el acceso interventores en un/Áreas/miembro/controlador lanza el siguiente error:

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 

la dirección de esta solicitud es/miembro/controlador /, Si cambio la Url demasiado/controlador de los fuegos del controlador, pero me da un error que el sistema no puede encontrar el Ver en la ruta/Vistas

Cuando se debe buscar en/Área/Miembros/Vistas

he hecho algo mal, ya sea en la actualización o me falta algo bt No puedo imaginar qué. He estado tratando de resolver esto durante 3 días ...

+0

consigo el mismo error utilizando el castillo de Windsor. –

+0

@Carles es bueno saber que no solo yo –

+0

Debería poder establecer un punto de interrupción en NinjectControllerFactory.GetControllerInstance, ¿podría verificar la URL de la solicitud e informar? –

Respuesta

1

actualización del núcleo, Acabo de enviar un arreglo: http://github.com/ninject/ninject.web.mvc

-Ian

+0

@Ian gracias por eso, intentaré comprobarlo este fin de semana si puedo encontrar algo de tiempo. –

+0

El enlace correcto es http://github.com/ninject/ninject.web.mvc -sorry No puedo editar. –

Cuestiones relacionadas