在我的asp.net MVC項目中,我有一個會話幫助器類,用於設置和檢索會話值。這是這個類:asp.net mvc設置會話值與線程安全
public class SessionManager
{
public static string UserName
{
get
{
return HttpContext.Current.Session[SessConstants.UName] ;
}
set
{
HttpContext.Current.Session[SessConstants.UName] = value;
}
}
}
正如你所看到的屬性是靜態的。我用這個在我的代碼如下:
//For setting values
SessionManager.UserName = "";
//For retrieving values
strLoggedinUser = SessionManager.UserName;
問題:
- 是否喜歡這些線程靜態屬性安全的設置爲HttpContext.Current.Session [ 'someVar']?
- 我應該創建一個實例屬性,並在我從MVC控制器類繼承的基礎控制器中實例化SessionManager。然後我可以讓我的所有控制器繼承我的自定義控制器而不是MVC一個
想法?
感謝您的時間...
如果你使用SessionManager來控制一個控制器或者來自特定的控制器實例,那麼線程安全不是問題,因爲控制器的新實例是爲每個請求創建的,並且會話是特定於會話的。但是,根據您在環境中使用的負載平衡方案,根本不建議使用會話。 – Maess 2012-04-10 17:48:59
當前SessionManager是一個幫助程序項目。啓用線程安全的舉措是:1)使其成爲具有實例屬性的實例類,並且2)使該類在從MVC控制器類繼承的定製基礎控制器類中可用。 – user20358 2012-04-10 17:51:17
所以你是說如果我現在將它移動到自定義控制器類中,它將會是線程安全的?即使屬性是靜態的? – user20358 2012-04-10 17:52:04