2011-12-02 10 views
6

私はこのHttpcontext.SessionはApplication_Startメソッドで呼び出され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ようninject使用しているHttpContextを注入しています()で常にnullです。

このインターフェイスは、セッションを処理するクラスのコンストラクタに挿入されます。

セッションは決して初期化されないので、何も追加できません。

context.session ["something"] = "something"のようなコードは、null参照例外を発生させます。

Application_Startはライフサイクルで早すぎますか?私は.InRequestScope()がこれを修正したと思ったが、それは私にとってはうまくいかなかった。

+0

をアプリケーションが起動するセッションがありません。 – Amy

+0

https://github.com/ninject/ninject.web.mvc/blob/Maintenance_2.2/mvc3/src/Ninject.Web.Mvc/Bootstrapper.cs行:68および69 –

答えて

9

IIS統合モードで実行している場合は、Application_StartのHTTPコンテキストオブジェクトにアクセスできません。

は次のように試してみてください:

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

    DependencyResolver.SetResolver(new NinjectDependencyResolver(kernel)); 
} 
関連する問題