每个用户的Singleton-Pattern ASP.NET C#

时间:2010-09-16 16:28:38

标签: c# asp.net singleton design-patterns

我正在使用asp.net c#构建一个Web应用程序,我有一个类,我想在多个页面中使用,每次实例化它。我需要在其中加载数据,并且在用户会话期间永远不会丢失它们。我想到了单例模式,但它共享了浏览器之间的类的实例。我该如何解决这个问题?

3 个答案:

答案 0 :(得分:7)

Singleton不是答案。请查看Session StateViewStateCookies

答案 1 :(得分:1)

UserData data = new UserData(somedata);

Session["UserData"] = data;

下一页

UserData data = (UserData) Session["UserData"];

答案 2 :(得分:1)

如果你有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;
        }
    }
}

可以改进代码,以避免锁定所有用户。不知道这样做是不是一个好主意,我建议你看看你是否可以用其他方式设计你的代码。