我正在尝试通过使用一些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";
答案 0 :(得分:2)
你的AppHttpContext
课非常好。它完美地抽象了HttpContext并允许单元测试。使用HttpContextWrapper
是安全的。作为改进,您可以使此类非静态,而不是使用静态SetContext
方法,您可以将委托注入构造函数。然后,需要使用上下文的所有类(通常仅限于您的webform页面)可以采用AppHttpContext
的实例。
答案 1 :(得分:0)
private readonly Func<HttpContextBase> _httpContext = () =>
new HttpContextWrapper(HttpContext.Current);