我试图通过使用一些ASP.NET MVC对象(特别是HttpContextWrapper)使现有的ASP.NET Web窗体应用程序更可单元测试。我已经看到了其用法的示例,它们总是创建一个新对象。我用Reflector分解了源代码,看到它所做的只是存储传递的HttpContext。但是我很好奇总是创建一个新的HttpContextWrapper实例或以某种方式遵循单例模式是否安全?以下是我在应用程序中使用的课程

public static class AppHttpContext {
    public static HttpContextBase Current { get { return Getter(); } }

    public static void SetContext(Func<HttpContextBase> getter) {
        Getter = getter;
    }

    private static Func<HttpContextBase> Getter = () => new HttpContextWrapper(HttpContext.Current);
}


我使用它类似于HttpContext.Current

AppHttpContext.Current.Session["blah"] = "something";

最佳答案

您的AppHttpContext课很棒。它完美地抽象了HttpContext并允许进行单元测试。使用HttpContextWrapper是安全的。作为改进,您可以使此类为非静态类,而不是使用静态的SetContext方法,您可以将委托注入到构造函数中。然后,所有需要与上下文一起使用的类(通常这些类只应限于您的Webform页面)可以采用AppHttpContext的实例。

关于c# - 始终创建一个新的HttpContextWrapper是否安全?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3990879/

10-11 08:06