2011-12-02 20 views
6

Estoy inyectando el HttpContext usando ninject como estoHttpcontext.Session es siempre nula con Ninject

private void RegisterDependencyResolver() 
{ 
    HttpContextBase context = new HttpContextWrapper(HttpContext.Current); 
    var kernel = new StandardKernel(); 
    kernel.Bind<ISession>().To<SessionService>() 
          .InRequestScope() 
          .WithConstructorArgument("context", ninjectContext => context); 

    DependencyResolver.SetResolver(new NinjectDependencyResolver(kernel)); 
} 

RegisterDependencyResolver() se llama en el método Application_Start.

Esta interfaz se inyecta en el constructor de una clase que maneja la sesión.

El problema es que la sesión nunca se inicializa, así que no puedo agregarle nada.

Cualquier código como context.session ["something"] = "something" provoca una excepción de referencia nula.

¿Application_Start es demasiado temprano en el ciclo de vida? Pensé que .InRequestScope() corrige esto pero no funciona para mí.

+0

no hay una sesión cuando se inicia la aplicación. – Amy

+0

mira https://github.com/ninject/ninject.web.mvc/blob/Maintenance_2.2/mvc3/src/Ninject.Web.Mvc/Bootstrapper.cs Filas: 68 y 69 –

Respuesta

9

Si está ejecutando en modo integrado IIS, no tiene acceso a ningún objeto de contexto Http en Application_Start.

Trate de esta manera:

private void RegisterDependencyResolver() 
{ 
    kernel 
     .Bind<ISession>() 
     .To<SessionService>() 
     .InRequestScope() 
     .WithConstructorArgument(
      "context", 
      ninjectContext => new HttpContextWrapper(HttpContext.Current) 
     ); 

    DependencyResolver.SetResolver(new NinjectDependencyResolver(kernel)); 
} 
Cuestiones relacionadas