2015-12-15 95 views
0

我用這個代碼,並獲得HttpExeption,當試圖獲得訪問會話值:如何設置會話值

protected void Application_Start() 
    { 
     AreaRegistration.RegisterAllAreas(); 

     WebApiConfig.Register(GlobalConfiguration.Configuration); 
     FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters); 
     RouteConfig.RegisterRoutes(RouteTable.Routes); 

     var builder = new ContainerBuilder(); 
     builder.RegisterControllers(Assembly.GetExecutingAssembly()); 
     builder.RegisterControllers(); 
     builder.Register(c => GetTransform()).As<ITransform>(); 
     var container = builder.Build(); 
     DependencyResolver.SetResolver(new AutofacDependencyResolver(container)); 
    } 

    private ITransform GetTransform() 
    { 
     if (Session["Transform"] == null) 
      Session["Transform"] = new Transform(); 

     return (ITransform)Session["Transform"]; 
    } 

如何設置會話值使用Autofac決心/注射

+0

您可以顯示依賴於'ITransform'類(通過構造函數注入),或者嘗試直接解決'ITransform'? –

+0

Yacoub: 'public class MainController:Controller { private ITransform Transform; public MainController(ITransform transform) Transform = transform; } ... }' – uda

+0

您能否分享錯誤詳細信息(堆棧跟蹤,異常消息等)?有一個活動的HttpContext時,你只注入ITransform嗎? –

回答

1

的到控制器Session您在GetTransform方法中訪問的屬性是在Global.asax.cs中定義的HttpApplication對象的屬性。

我假設這不是您感興趣的會話對象。您想要的(我認爲)是綁定到當前請求的會話對象(這與從內部訪問Session屬性相同控制器)。

這裏是你如何能做到這:

private ITransform GetTransform() 
{ 
    var session = System.Web.HttpContext.Current.Session; 

    if (session["Transform"] == null) 
     session["Transform"] = new Transform(); 

    return (ITransform)session["Transform"]; 
}