首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >ASP.Net MVC控制器构造函数中的会话为空

ASP.Net MVC控制器构造函数中的会话为空
EN

Stack Overflow用户
提问于 2009-05-20 18:34:09
回答 6查看 64.5K关注 0票数 91

为什么在控制器的构造函数中会话是空的?可以从Action方法访问它。大概是因为MVC路由框架负责创建一个控制器,所以它当时并没有(重新)实例化会话。

有没有人知道这是不是故意的,如果是的话,为什么?

我已经设法通过使用延迟加载模式绕过了这个问题。

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2009-07-31 13:09:13

Andrei是对的-它是空的,因为当在ASP.NET MVC框架下运行时,在构建控制器类时不会设置HttpContext (因此也就是HttpContext.Session),而是稍后由ControllerBuilder类设置(“注入”)。如果您想更好地理解生命周期,可以下载ASP.NET MVC框架(源代码可用),或者参阅:this page

如果您需要访问会话,那么一种方法是覆盖"OnActionExecuting“方法并在那里访问它,因为它将在那时可用。

然而,正如Andrei建议的那样,如果你的代码依赖于会话,那么编写单元测试可能会很困难,所以也许你可以考虑将会话包装在一个帮助器类中,然后当在单元测试下运行时,这个帮助器类可以换出一个不同的非web版本,从而将你的控制器与web解耦。

票数 82
EN

Stack Overflow用户

发布于 2012-09-28 15:12:02

除了这里的其他答案之外,虽然构造函数中没有填充Controller.Session,但您仍然可以通过以下方式访问会话:

System.Web.HttpContext.Current.Session

标准的警告是,这可能会降低控制器的可测试性。

票数 63
EN

Stack Overflow用户

发布于 2009-06-19 23:31:38

会话被注入到生命周期的后期。为什么你需要构造函数中的会话呢?如果TDD需要它,那么应该将会话包装到一个可mockable对象中。

票数 11
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/889516

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档