MVC,不再“假设”使用HttpContext.Current了?

时间:2012-02-02 20:17:50

标签: asp.net-mvc controller httpcontext

帖子here中有人评论说在使用MVC时不应该使用HttpContext.Current,而是应该使用ControllerBase.ControllerContext。在某些方面,这是有道理的,但在其他方面却没有。

例如,ControllerContext是一个实例变量,所以我想引用的所有地方,比如我的Session变量,我需要有一个对Controller的引用?为什么我们“不应该”在MVC中使用HttpContext.Current,当你还可以的时候?是否有一个“适当的”MVC“方式”来获取我的Session对象而无需引用Controller?

我知道测试方面,它更好的原因在许多其他地方说明,但我正在研究一个管理Session变量和引用HttpContext.Current的项目,我想知道是否有更好的方法来获取我的手上的Session对象,而不传递对控制器的引用。

2 个答案:

答案 0 :(得分:8)

这主要是因为如果使用HttpContext.Current单元测试会非常困难,因为使用普通的模拟框架无法模拟这个值。

HttpContext.Current也会造成更脆弱的代码,因为它可能被滥用和滥用。例如,您可以在业务层中使用它,因为它很方便,但如果您选择使用ASP.NET之外的替代表示层,它将会中断。

现在一般来说,静态方法不受欢迎,因为它们不能依赖注入

答案 1 :(得分:1)

你的一篇帖子是由于模拟测试,根据模拟,可能没有HttpContext,只有控制器上下文。否则,我确实使用HttpContext.Current,而不是在我的单元测试中。