Question

Je l'ai vu beaucoup de différentes façons de configurer Ninject avec ASP.NET MVC, mais la mise en œuvre semble changer légèrement avec chaque version du framework MVC. Je suis en train d'injecter une session RavenDB dans mon dépôt. Voici ce que j'ai qui est presque travail.

public class MvcApplication : NinjectHttpApplication
{
    ...

    protected override void OnApplicationStarted()
    {
        base.OnApplicationStarted();

        AreaRegistration.RegisterAllAreas();

        RegisterGlobalFilters(GlobalFilters.Filters);
        RegisterRoutes(RouteTable.Routes);
    }

    protected override IKernel CreateKernel()
    {
        return new StandardKernel(new MyNinjectModule());
    }

    public static IDocumentSession CurrentSession
    {
        get { return (IDocumentSession)HttpContext.Current.Items[RavenSessionKey]; }
    }
    ...
}

public class MyNinjectModule : NinjectModule
{
    public override void Load()
    {
        Bind<IUserRepository>().To<UserRepository>();
        Bind<IDocumentSession>().ToConstant(MvcApplication.CurrentSession);
    }
}

Quand il tente de résoudre IDocumentSession, je reçois l'erreur suivante.

Error activating IDocumentSession using binding from IDocumentSession to constant value
Provider returned null.
Activation path:
  3) Injection of dependency IDocumentSession into parameter documentSession of constructor of type UserRepository

Toutes les idées sur la façon de faire la volonté de IDocumentSession?

Était-ce utile?

La solution

ToConstant(MvcApplication.CurrentSession) est évalué au démarrage de l'application. Ce que vous voulez est ToMethod(ctx => MvcApplication.CurrentSession) d'évaluation retardée

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top