它取決於Core類型的對象中存儲了什麼類型的數據。說它的一些配置數據,你想單獨管理(即它與web.config中的完全不同),那麼它是有道理的。
然而,讓我們說,如果網站是一個購物車應用程序...並且您希望存儲這樣的用戶對象......假設用戶對象包含他已在卡中保存的項目列表。這將存儲在appdomain中。因此它違背了你的實現。因爲您希望將用戶信息與傳入請求綁定,而不是整個應用程序。因此,每次請求您至少需要查詢一次...(以傳統意義上講)。
繼續使用相同的例子,想象一下你想以這種方式使用用戶對象:這個用戶對象被用在你的web應用程序中不同類的內部。傳統上,人們會編寫代碼來訪問數據庫,並在每次需要使用用戶對象時創建對象。相反,你會想要一些單例模式。在這種情況下,您的用戶對象將從db中查詢(並創建)一次,並在請求的整個生命週期中重新使用。如果你將這個對象(在其創建後)緩存在http上下文緩存中,這是可能的。 HttpContext.Current.Items["foo"]
下面的代碼說明了點...
public class AppUser
{
public string Username { get; set; }
public string[] Roles { get; set; }
public AppUser()
{
var appuser = HttpContext.Session["AppUser"] as AppUser;
if(appuser == null)
throw new Exception("User session has expired");
Username = appuser.Username;
Roles = appuser.Roles;
}
}
public class WebAppContext
{
const string ContextKey = "WebAppContext";
WebAppContext() { } //empty constructor
public static WebAppContext Current
{
get
{
var ctx = HttpContext.Current.Items[ContextKey] as WebAppContext;
if(ctx == null)
{
try
{
ctx = new WebAppContext() { User = new AppUser() };
}
catch
{
//Redirect for login
}
HttpContext.Current.Items.Add(ContextKey, ctx);
}
return ctx;
}
}
public AppUser User { get; set; }
}
PS:這個職位採取:a request level singleton object in asp.net
參見http://csharpindepth.com/articles/general/singleton.aspx –
你在asp.net中創建一個靜態單例的原因是什麼?這個班會有特別貴的東西嗎? –
您是否缺少私有構造函數? –