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

gan*_*elo 9 asp.net-mvc controller httpcontext

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

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

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

Ali*_*tad 8

这主要是因为如果使用单元测试将非常困难,HttpContext.Current因为使用普通的模拟框架模拟这个值是不可能的.

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

通常,静态方法现在不受欢迎,因为它们不能依赖注入.