单例模式如何在Web上下文中工作?

Ste*_*a D 19 c# asp.net singleton design-patterns

因此,使用单例模式的对象只能有一个实例.这在网站上如何运作?

问题:

  1. 单身对象是否对网站的每个客户/访客都是唯一的?即单个对象是否获得一个PER客户端实例?
  2. Web应用程序中的对象只持续几秒钟,因此如果两个客户端同时访问网站,则两个客户端都将尝试创建单个对象.这是否意味着有人会看到一个例外,游客会看到这个例外情况?我试过谷歌搜索,但找不到直接的答案.我只想找一点澄清.

swa*_*nee 8

史蒂夫,我会尽力回答你的每一个问题:

1)对于Web开发,将对象作为Web请求的范围是很常见的(有时这也称为"每个请求上下文"或"每个http上下文"),但我们通常不将这些称为单个确切的原因.实际上,大多数IOC容器都具有开箱即用的"每个Web请求"范围以及"单例".

2)有时候Web应用程序也有真正的单例(所有请求都可以访问).如上所述,这并不完全正确,因为它将限定在应用程序池中,并且当/如果重新启动应用程序池时将被吹走.但这是用于Web应用程序的单例.正如Jigar所提到的,有时候"横切关注",例如伐木等......都是这样设置的.这些通常不会在每个Web请求中初始化,而是在global.asax中或通过依赖IOC容器为您执行此操作.您只需要确保在执行对​​象创建时使用其中一个标准锁定模式来防止两个线程/客户端/等等同时创建对象.这里有一个来自Microsoft的链接,但也有其他实现:http: //msdn.microsoft.com/en-us/library/ff650316.aspx 如果你使用一个流行的IOC容器,它将处理这个为你(Structuremap,Windsor,Autofac,Unity,Ninject ......和许多其他人).

你需要向你的同事询问他们所指的方法,因为两者在某些情况下都是有效的并且很常见.