【发布时间】:2010-09-16 16:28:37
【问题描述】:
我正在使用 asp.net c# 构建一个 Web 应用程序,并且我有一个类,我想在多个页面中使用它,而每次都实例化它。我需要在其中加载数据,并且在用户会话期间永远不会丢失它们。我想到了单例模式,但它共享了浏览器之间的类实例。我该如何解决这个问题?
【问题讨论】:
-
根据定义,这不是单例模式。
标签: c# asp.net singleton design-patterns
我正在使用 asp.net c# 构建一个 Web 应用程序,并且我有一个类,我想在多个页面中使用它,而每次都实例化它。我需要在其中加载数据,并且在用户会话期间永远不会丢失它们。我想到了单例模式,但它共享了浏览器之间的类实例。我该如何解决这个问题?
【问题讨论】:
标签: c# asp.net singleton design-patterns
单例不是答案。看看Session State、ViewState 和Cookies。
【讨论】:
UserData data = new UserData(somedata);
Session["UserData"] = data;
下一页
UserData data = (UserData) Session["UserData"];
【讨论】:
如果你有 inproc 会话状态,你可以使用类似这样的东西
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;
}
}
}
可以改进代码,以避免锁定所有用户。不知道这样实现Singleton是否是个好主意,我建议你看看你是否可以用其他方式设计你的代码。
【讨论】: