Inyectar una dependencia en Global.asax
Estoy iniciando una aplicación web con MVC3 y Ninject. Hay una dependencia que también necesito en el archivo Global.asax que debe ser un singleton.
Pensé que debería ser así:
public class MvcApplication : NinjectHttpApplication
{
IUserAuthentication _auth;
public MvcApplication()
{
base.AuthenticateRequest += new EventHandler(MvcApplication_AuthenticateRequest);
}
protected override IKernel CreateKernel()
{
var _kernel = new StandardKernel(new SecurityModule());
_auth = _kernel.Get<IUserAuthentication>();
return _kernel;
}
void MvcApplication_AuthenticateRequest(object sender, EventArgs e)
{
_auth.ToString();
}
Pero entonces vi que_auth
es nulo cuandoMvcApplication_AuthenticateRequest
se llama
Entonces intenté así:
public class MvcApplication : NinjectHttpApplication
{
ItUserAuthentication _auth;
IKernel _kernel;
public MvcApplication()
{
_kernel = new StandardKernel(new SecurityModule());
_auth = _kernel.Get<IUserAuthentication>();
base.AuthenticateRequest += new EventHandler(MvcApplication_AuthenticateRequest);
}
protected override IKernel CreateKernel()
{
return _kernel;
}
void MvcApplication_AuthenticateRequest(object sender, EventArgs e)
{
_auth.ToString();
}
Pero ahora puedo ver que se llama al constructor varias veces, por lo tanto, tendré varios IKernel, y supongo que las instancias singleton no serán tan únicas en el alcance de mi aplicación.
¿Cómo debería hacerlo? ¿Usando una variable estática?