Ninject-ing une dépendance Mondiale.asax

Je suis le démarrage d'une application web avec MVC3 et Ninject. Il y a une dépendance que j'ai aussi besoin dans le monde.asax fichier qui doit être un singleton.

J'ai pensé qu'il devrait être comme ceci:

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();
    }

Mais ensuite j'ai vu que _auth est nulle lorsque l' MvcApplication_AuthenticateRequest est appelé.

Ensuite, j'ai essayé comme ceci:

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();
    }

Mais maintenant, je peux voir que le constructeur est appelé plusieurs fois, donc je vais avoir plusieurs IKernel, et je suppose que singleton cas ne sera pas si singleton dans mon application.

Comment dois je faire? Utilisation d'une variable statique?

OriginalL'auteur vtortola | 2011-04-01