2017-03-27 8 views
1

OWINとAutoFacをIoCコンテナとして使用すると、依存状態注入を使​​用してセッション状態記憶メカニズムにHttpContextを注入しようとしていますが、HttpContext.Sessionはnullです。また、それが重要かどうかは分かりませんが、HttpContextWrapper(HttpContext.Current)を注入しようとしているクラスは、nugetパッケージとしてビルドした外部DLLです。依存性注入を使用すると、HttpContextセッションがnullです

Autofac登録は、私のAutofacモジュール

public static void Register(IAppBuilder app) 
    { 
      var builder = new ContainerBuilder(); 
      builder.RegisterControllers(Assembly.GetExecutingAssembly()); 
      builder.RegisterModelBinderProvider(); 
      builder.RegisterFilterProvider(); 

      builder.RegisterModule(new GatewayModule()); 

      var container = builder.Build(); 
      DependencyResolver.SetResolver(new AutofacDependencyResolver(container)); 
      app.UseAutofacMiddleware(container); 
    } 

そしてautofacモジュールのコードレジスタ:私は私のSessionStateTokenStoreに見たときに

public class GatewayModule : Module 
{ 
    protected override void Load(ContainerBuilder builder) 
    { 
     builder.RegisterType<SessionStateTokenStore>() 
      .WithParameter(new TypedParameter(typeof(HttpContextBase), new HttpContextWrapper(HttpContext.Current))) 
      .As<ITokenStore>().InstancePerRequest(); 
    } 
} 

はしかし、_httpContext.Sessionはnullです。私のデバッガのウォッチウィンドウのイメージです。 HttpContext.Session is null

なぜHttpContext.Sessionがnullで、どうすれば修正できますか?

答えて

0

AutofacにHttpContextBaseを解決させて問題を解決させることができますか?

// HttpContext 
builder.Register(c => new HttpContextWrapper(HttpContext.Current) as HttpContextBase) 
    .As<HttpContextBase>().InstancePerLifetimeScope(); 
builder.Register(c => c.Resolve<HttpContextBase>().Request) 
    .As<HttpRequestBase>().InstancePerLifetimeScope(); 
builder.Register(c => c.Resolve<HttpContextBase>().Response) 
    .As<HttpResponseBase>().InstancePerLifetimeScope(); 
builder.Register(c => c.Resolve<HttpContextBase>().Server) 
    .As<HttpServerUtilityBase>().InstancePerLifetimeScope(); 
builder.Register(c => c.Resolve<HttpContextBase>().Session) 
    .As<HttpSessionStateBase>().InstancePerLifetimeScope(); 

builder.RegisterType<SessionStateTokenStore>() 
    .As<ITokenStore>().InstancePerRequest(); 
+0

ありがとうございます!それはうまくいきましたが、以前はそれを試してみましたが、AutofacでHttpContextBaseを解決させた後、.WithParameter(新しいTypedParameter(typeof(HttpContextBase)、新しいHttpContextWrapper(HttpContext.Current)))を登録しました。 AutofacWebTypesModuleは、提案したのと同じことを行うだけでなく、もう少し追加して登録することもできます。 – csalzsieder

関連する問題