我正在使用ASP.NET C#构建一个Web应用程序,我有一个类想在多个页面中使用而不必每次都实例化它。我需要在其中加载数据并在用户会话期间永不丢失。我考虑过单例模式,但它在浏览器之间共享类的实例。我该如何解决这个问题?
UserData data = new UserData(somedata);
Session["UserData"] = data;
UserData data = (UserData) Session["UserData"];
class Singleton
{
static object locker = new Object();
public static Singleton Instance
{
get
{
var inst = HttpContext.Current.Session["InstanceKey"] as Singleton;
if (inst == null)
{
lock (locker)
{
inst = HttpContext.Current.Session["InstanceKey"] as Singleton;
if (inst == null)
{
inst = new Singleton();
HttpContext.Current.Session["InstanceKey"] = inst;
}
}
}
return inst;
}
}
}
代码可以改进,以避免所有用户被锁定。不确定实现单例模式是否是一个好主意,建议您看看是否可以用其他方式设计您的代码。