Web环境中的单例设计模式

时间:2015-06-23 19:52:55

标签: asp.net design-patterns web-applications

我在我的asp.net网站上使用了一个单例类来提供用户信息。

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

这是我的班级:

# Reproducible Example!
df <- data.frame(a=c(rep(12345,3),rep(44444,2),55555),
                 b=c("John","Mary and Bob","Ben","Jim","Larry & Meg","Tommy")
)
couples <- which(grepl("&| and ",df$b,ignore.case=T))

df_couples <- df[couples,][!duplicated(df$a[couples]),]
df_singles <- df[-couples,][!duplicated(df$a[-couples]),]

rbind(df_couples, df_singles[!df_singles$a %in% df_couples$a,])
# 
#       a            b
# 2 12345 Mary and Bob
# 5 44444  Larry & Meg
# 6 55555        Tommy

3 个答案:

答案 0 :(得分:0)

如果您的应用程序在Web场方案中使用,则只有您的类的多个实例。请参阅此主题:Are static class instances unique to a request or a server in ASP.NET?

答案 1 :(得分:0)

  

当用户开始登录时,此类将存储数据   只有一个用户。

您的应用程序中只存在一个User实例。

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

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

理想情况下,在Web应用程序中,您需要创建 Principal 对象,并将其存储在 HttpContext 中。

仅供参考: 我们在Web应用程序中使用Singleton来存储应用程序开始直到结束时使用的信息(大多数情况下永远不会更改)。

答案 2 :(得分:0)

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

当且仅当您拥有多个AppDomain时,无论是在同一进程中,在另一个进程中,还是在另一台计算机上(例如在Web场中),正如William在answer中指出的那样,可能有多个实例。

Scope of static variables in ASP.NET sites

In .Net is the 'Staticness' of a public static variable limited to an AppDomain or the whole process?