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语言)中的静态字段,例如用于保存
如果并且只有当你有多个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中的请求或服务器是唯一的吗?