【问题标题】:MVC, not "supposed" to use HttpContext.Current anymore?MVC,不再“应该”使用 HttpContext.Current 了吗?
【发布时间】:2012-02-02 20:17:49
【问题描述】:

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

例如,ControllerContext 是一个实例变量,那么在我想引用的任何地方,比如我的 Session 变量,我都需要对 Controller 的引用吗?为什么我们“不应该”在 MVC 中使用 HttpContext.Current,而您仍然可以?是否有一种“适当的”MVC“方式”来获取我的 Session 对象而不必引用控制器?

我知道测试方面,出于许多其他地方所述的原因,它更好,但我正在开发一个管理 Session 变量并引用 HttpContext.Current 的项目,我想知道是否有更好的方法来获取我的在不传递对控制器的引用的情况下处理 Session 对象。

【问题讨论】:

    标签: asp.net-mvc controller httpcontext


    【解决方案1】:

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

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

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

    【讨论】:

      【解决方案2】:

      您的一篇文章是由于 Mock 测试,根据 Mock 可能没有 HttpContext,只有控制器上下文。否则,我会使用HttpContext.Current,只是不在我的单元测试中。

      【讨论】:

        猜你喜欢
        • 2011-08-22
        • 2010-09-12
        • 1970-01-01
        • 1970-01-01
        • 2023-03-09
        • 1970-01-01
        • 2016-03-19
        • 2016-02-14
        • 2016-10-30
        相关资源
        最近更新 更多