2015-12-15 99 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"]; 
}