2011-12-02 8 views
6

BuHttpcontext.Session Application_Start yönteminde denir Ninject

private void RegisterDependencyResolver() 
{ 
    HttpContextBase context = new HttpContextWrapper(HttpContext.Current); 
    var kernel = new StandardKernel(); 
    kernel.Bind<ISession>().To<SessionService>() 
          .InRequestScope() 
          .WithConstructorArgument("context", ninjectContext => context); 

    DependencyResolver.SetResolver(new NinjectDependencyResolver(kernel)); 
} 

RegisterDependencyResolver gibi Ninject kullanarak HttpContext enjekte ediyorum() ile her zaman sıfırdır.

Bu arabirim, oturumları işleyen bir sınıfın yapıcısı içine enjekte edilir.

Sorun, oturum hiçbir zaman başlatılmadı, bu yüzden ona hiçbir şey ekleyemiyorum.

context.session ["something"] = "bir şey" gibi herhangi bir kod, boş başvuru istisnasını yükseltir.

Application_Start yaşam döngüsünün çok erken mi? Düşündüm. InququestScope() bunu düzeltiyor ama benim için çalışmıyor.

+0

uygulama başladığında bir oturum yoktur. – Amy

+0

https://github.com/ninject/ninject.web.mvc/blob/Maintenance_2.2/mvc3/src/Ninject.Web.Mvc/Bootstrapper.cs Satırları: 68 ve 69'a bakın –

cevap

9

IIS tümleşik modda çalışıyorsanız, Application_Start numaralı telefondan Http bağlam nesnesine erişiminiz yoktur.

böyle deneyin:

private void RegisterDependencyResolver() 
{ 
    kernel 
     .Bind<ISession>() 
     .To<SessionService>() 
     .InRequestScope() 
     .WithConstructorArgument(
      "context", 
      ninjectContext => new HttpContextWrapper(HttpContext.Current) 
     ); 

    DependencyResolver.SetResolver(new NinjectDependencyResolver(kernel)); 
}