2010-09-01 22 views
14

En mi aplicación asp.net mvc estoy usando Ninject como un framework DI.Inyectando HttpContext en Ninject 2

Mi HttpAccountService es utilizado por mis controladores para obtener información de y para las cookies. Para esto necesito HttpContext.Current en HttpAccountService. Como se trata de una dependencia Inyecté punto a través del constructor como tal:

kernel.Bind<IAccountService>() 
    .To<HttpAccountService>() 
    .InRequestScope() 
    .WithConstructorArgument("context", HttpContext.Current); 

Lamentablemente esto siempre se une al mismo contexto que hace que después de la primera solicitud finaliza este contexto se vuelve obsoleto.

¿Cómo debo inyectar correctamente mi HttpContext?

Respuesta

23

WithConstructorArgument tiene una sobrecarga que toma un Func<NinjectContext,T>, es decir, se puede utilizar:

....WithConstructorArgument("context",ninjectContext =>HttpContext.Current);

que llame a la devolución de llamada proporcionada ' 'lambda dentro del procesamiento de la solicitud y obtenga el valor correcto en ese punto en el tiempo [a diferencia de que llame a la otra sobrecarga y proporcione un valor constante que obtenga calculada en Bind<> tiempo].

(Si usted no está tratando de burlarse del contexto, supongo que usted considere usarlo en línea)

+0

que no parece sintaxis para compilar. Se compila con x => HttpContext.Current, pero esto no logra el resultado esperado. ¿Podría ser porque obtengo mi ninjectkernel de una fábrica (estática)? –

+0

En una inspección posterior, parece que ahora obtengo el contexto correcto, pero mi problema debe ser otro. Thx –

+0

para el registro: fue porque un RedirectToRoute restablece que solicita cookies. –

Cuestiones relacionadas