我有一个问题。我在我的项目中构建了自定义类,其中包含公共静态属性ctx和assingn HttpContext.Current对象。在运行时,该属性似乎引用了HttpContext对象,但ctx.Session类为null。当我调试我的应用程序时,表达式(ctx)的左侧与右侧(HttpContext.Current)不完全相同。为什么会这样?
素不相识
答案 0 :(得分:1)
HttpContext.Current只是该请求的单例。通过将HttpContext.Current分配给静态变量,您将共享此HttpContext.Current到整个范围,这可能不正确。
Session是每用户对象,而static是应用程序范围的对象。明智地使用静态。
答案 1 :(得分:-1)
我会做的就是这样。
1-提供当前httpcontext的静态类(例如:ContextFactory
)。如果它有HttpContext.Current,则提供该值,如果没有则提供指定的上下文。在您的情况下,new Mock<HttpContextBase>();
public static class ContextFactory
{
private static HttpContextBase current = null;
public static HttpContextBase Current
{
get { return current ?? HttpContext.Current; }
set { current = value; }
}
}
2-然后我将代码UserSess改为
public static class UserSess
{
public static UserID
{
get { return ContextFactory.Current.Session["UserID"]; }
set { ContextFactory.Current.Session["UserID"] = value; }
}
//...
}
真诚