Pregunta

he visto un montón de diferentes maneras de configurar Ninject con ASP.NET MVC, pero la implementación parece cambiar ligeramente con cada versión del framework MVC. Estoy tratando de inyectar una sesión RavenDB en mi repositorio. Aquí es lo que tengo que es casi de trabajo.

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

Cuando se trata de resolver IDocumentSession, me sale el siguiente error.

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

¿Alguna idea sobre cómo hacer la determinación IDocumentSession?

¿Fue útil?

Solución

ToConstant(MvcApplication.CurrentSession) se evalúa al inicio de la aplicación. Lo que queremos es retrasada ToMethod(ctx => MvcApplication.CurrentSession) evaluación

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top