关于ASP.NET的Singleton设计模式:在网络环境

Singleton Design Pattern in a web environment

本问题已经有最佳答案,请猛点这里访问。

我在我的ASP.NET网站中使用的是一个singleton类,用于用户信息。

我想知道,如果我把这个网站放到网上,当用户开始登录时,这个类将只存储数据给一个用户。

这是我的课:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
public class User
{
    private static User instance;        
    private User(){}

    public static User Instance
    {
        get
        {
            if (instance == null)
            {
                instance = new User();
            }
            return instance;
        }
    }

    public Institute LoggedInstitute { get; set; }
    public List<Institute> Institutes { get; set; }
}


C(我相信所有.NET语言)中的静态字段,例如用于保存User类的单例实例的字段,在AppDomain中是"唯一的"。

如果并且只有当你有多个AppDomain,无论是在同一个进程中,在另一个进程中,还是在另一台机器上(例如在Web场中),就像威廉在他的回答中指出的那样,你可以有多个实例。

ASP.NET站点中静态变量的范围

在.NET中,公共静态变量的"静态性"是否仅限于AppDomain或整个进程?


when the users start to login, this this class will store the data to
only one user.

应用程序中只存在一个用户实例。

对于Web应用程序来说,将每个用户信息存储在singleton中是一个非常糟糕的主意。为什么?

多个用户请求您的Web应用程序,他们都将共享同一个用户实例。我保证这不是你想要的。

理想情况下,在Web应用程序中,您希望创建主体对象,并将其存储在httpcontext中。

仅供参考:我们在Web应用程序中使用singleton来存储信息(大部分永远不会更改),这些信息在应用程序的开始使用到结束。


如果您的应用程序在Web场方案中使用,则类中只有多个实例。引用此线程:静态类实例对于ASP.NET中的请求或服务器是唯一的吗?