我试图通过使用一些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的实例.