始终创建新的HttpContextWrapper是否安全?

时间:2010-10-21 18:51:49

标签: c# asp.net asp.net-mvc unit-testing

我正在尝试通过使用一些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";

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:0)

private readonly Func<HttpContextBase> _httpContext = () =>
    new HttpContextWrapper(HttpContext.Current);