我有一個問題。我在我的項目中構建了包含公共靜態屬性ctx和assitingn HttpContext.Current對象的自定義類。在運行時,該屬性似乎引用HttpContext對象,但ctx.Session類爲null。當我調試我的應用程序時,表達式(ctx)的左側與右側(HttpContext.Current)不完全相同。爲什麼發生這種情況?ASP.NET MVC HttpContext.Session對象
素不相識
我有一個問題。我在我的項目中構建了包含公共靜態屬性ctx和assitingn HttpContext.Current對象的自定義類。在運行時,該屬性似乎引用HttpContext對象,但ctx.Session類爲null。當我調試我的應用程序時,表達式(ctx)的左側與右側(HttpContext.Current)不完全相同。爲什麼發生這種情況?ASP.NET MVC HttpContext.Session對象
素不相識
HttpContext.Current僅適用於請求的單例。通過將HttpContext.Current賦值給一個靜態變量,你可以將這個HttpContext.Current分享給整個範圍,這可能是不對的。
會話是每個用戶對象,而靜態是應用程序範圍的對象。明智地使用靜態。
我會做的就是這樣。
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; }
}
//...
}
真誠
不要存儲會話(=每個用戶的不同)在一個靜態變量(=的每個用戶都一樣)!您可以看到, – 2011-12-05 09:56:11
會話不存儲在靜態類中,除非用戶設置它(必須在測試中完成)。如果未設置,它將返回CURRENT http上下文和CORRECT會話。 – edokan 2011-12-27 13:42:41
對不起,我錯過了 – 2012-01-06 08:19:06