【问题标题】:System.Web.Abstractions: what is it good for?System.Web.Abstractions:它有什么用?
【发布时间】:2010-10-17 18:51:02
【问题描述】:

...绝对没有?

它分别为 ASP.NET WebFormsASP.NET MVC 解决了哪些难题?

您能否以某种方式创建一个使用 System.Web.Abstractions 的 ASP.NET * 基础应用程序,以便它可以在两种 ASP.NET-web 应用程序中使用?

在这种情况下,他们是如何将 System.Web.Abstractions 中的类改造回 ASP.NET WebForms 的?

你不能从命名空间中新建对象,所以它不能用于模拟,不是吗?

更新:抱歉不清楚我知道测试 HttpContext 和其他构建它的 ASP.NET 对象的问题。不过还是谢谢你的好解释。

【问题讨论】:

  • 完全超出了左侧字段,但是由于您的问题标题,我现在脑海中出现了 Edwin Starr 的战争。 :(

标签: .net asp.net asp.net-mvc abstraction


【解决方案1】:

命名空间包含旨在包装 ASP.NET 核心类的类型(例如 HttpSessionState)。

什么,你想知道为什么?

这些核心 ASP.NET 类中有许多是密封的或静态的,因此无法打破它们与您的代码之间的依赖关系。这意味着您不能模拟这些核心依赖项,从而使测试您的 ASP.NET 代码变得更加困难。因此,您无需直接在代码中直接操作 HttpResponse,而是通过 HttpResponseWrapper 操作它,在测试期间,您可以通过存根或模拟来控制 HttpResponse 对象的行为方式。

如果您曾经考虑过创建这些包装器,或者之前已经实现过其中的一两个,那么您就会知道在该命名空间中包含了很多工作,而且我很高兴他们做到了.

【讨论】:

    【解决方案2】:

    确实是用来嘲讽的。 - HttpContext 是一个密封类,不能(容易)被模拟。 HttpContextBase 不是密封的,我相信它的方法是虚拟的,这使得模拟更容易。

    虽然您无法新建 HttpContextBase 实例(例如,用于 WebForms),但您可以通过以下方式获取实例:

    var ctx = new HttpContextWrapper(HttpContext.Current);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-01-14
      • 2011-05-27
      • 1970-01-01
      • 1970-01-01
      • 2019-04-26
      • 2016-04-29
      • 2017-03-02
      • 2012-10-04
      相关资源
      最近更新 更多