我一直在考虑为Web应用程序使用Singleton模式设计来替换Session变量的使用,原因我不想详细说明;但在研究了这个主题后,似乎这种模式可能不是最有效或最有效的方法。
所以我现在正在考虑一种方法,它可以有效地利用Singleton设计的一些好处并结合使用Session变量。
问题如前所述,"基于会话的单例实现是多个会话变量的合理替代品"
希望这个问题不是基于意见问题,而是基于会话变量和单例模式设计的概念。
我的实现类似于以下内容:
public class SingletonSessionData
{
// User Identity Properties
public string UserId { get; set; }
public string UserName { get; set; }
private const string SessionData= "UserSessionObject";
private SingletonSessionData() { }
public static SingletonSessionData Instance()
{
SingletonSessionData oSingleton;
if(null == System.Web.HttpContext.Current.Session[SessionData])
{
// use private constructor to create an instance, place it into the session
oSingleton = new SingletonSessionData();
System.Web.HttpContext.Current.Session[SessionData] = oSingleton;
}
else
{
//Retrieve the existing instance
oSingleton = (ReportSessionData)System.Web.HttpContext.Current.Session[SessionData];
}
return oSingleton;
}
// Edited after the initial post to illustrate my proposed method of disposing the object to release memory resources as opposed to dependency of session timeout
public static void Dispose()
{
System.Web.HttpContext.Current.Session.Remove(SessionData);
}
}
我期望从这种方法中获得的是仍然将会话变量的持久性保持到特定会话,但是具有与Intellisense一起使用的好处以及我认为通过使用Singleton可能更有效和更有效的内存管理存在于会话中。
合理还是不合理?