Estoy comenzando una aplicación web con MVC3 y Ninject. Hay una dependencia que también necesito en el archivo Global.asax que debe ser singleton.Ninject -ing una dependencia en Global.asax
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 luego vi que _auth
es nula cuando MvcApplication_AuthenticateRequest
se llama.
Entonces tratado de esta manera:
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 el constructor está siendo llamado varias veces, por lo tanto, voy a tener varios iKernel, y supongo que los casos simples no serán tan Singleton en el alcance de mi aplicación.
¿Cómo debo hacerlo? ¿Usando una variable estática?
¿No es una muerte el hecho de que está llamando a DependencyResolver en cada solicitud? – vtortola
No lo creo, @Remo debería poder decirle más que a mí, pero dado que inyecté mi _authService en la mayoría de mi controlador en el constructor, probablemente haga lo mismo y no "cueste" que se mutque ... – VinnyG
genial. Creo que esto funcionará hasta que @ Remo solucione el problema. Un millón de gracias. – vtortola