【问题标题】:How to use System.Web.Abstractions in a Web Forms application?如何在 Web 窗体应用程序中使用 System.Web.Abstractions?
【发布时间】:2009-06-21 12:27:57
【问题描述】:

我正在开发一个 Web 表单应用程序,该应用程序打算移植到 MVC 以用于其 vNext +1 版本。但目前它是一个 .NET 3.5 SP1 Web 表单应用程序。

我想要拥有我们自己的 context,它在标准 HttpContext/ HttpRequest/ HttpResponse/ 等对象之上提供了一些帮助程序。另外,我希望将 HttpContext 类与上下文分离。

因为有使用 MVC 的意图,所以我认为让我们的自定义上下文与 System.Web.Abstractions 程序集中附带的 HttpContextBase(和相关类)一起工作是个好主意。

我不想设计一个解决方案来解决目前的一些问题,但需要重新编写以在 MVC 中实现可测试性(并且在 MCV 中毫无用处)但我到目前为止所取得的成就并没有看起来真的很有用。

问题是我找不到任何好的例子来说明如何实现这一点,如何扩展 HttpContextWrapperHttpContextBase 以便您可以保持关注点分离。

【问题讨论】:

    标签: asp.net webforms system.web.abstractions


    【解决方案1】:

    您不需要重写 HttpContextWrapper 或 HttpContextBase 来实现这一点,而是让您的自定义上下文与 HttpContextBase 对象一起工作,这样您就可以单独测试您的自定义上下文。

    public class MyContext
    {
    
        // helper methods work with this context
        HttpContextBase _ctx;
    
        public MyContext(HttpContextBase context)
        {
            _ctx = context;
        }
    
    
    }
    

    当您在实际应用程序中创建自定义上下文时,只需使用

    进行初始化
    new MyContext(new HttpContextWrapper(HttpContext.Current));
    

    【讨论】:

      【解决方案2】:

      为HttpContext写一些扩展方法还不够吗?我已经在我当前的应用程序中做到了这一点,并且效果很好。我想这取决于您希望自定义 HttpContext 类有多复杂,以及它是否旨在表示与标准 HttpContext 所表示的内容根本不同的东西。不过,我真的想不出一个场景。或许您可以详细说明一下您的自定义 HttpContext 的外观?

      【讨论】:

      • 这并不是我想要更改的实际上下文(尽管还有一些额外的属性),添加的大部分内容是请求和响应,我想要不同的对象(包装器对象)。它也没有与扩展方法分离关注点
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-25
      • 2021-09-24
      • 2018-01-05
      相关资源
      最近更新 更多