gpt4 book ai didi

c# - 单例模式如何在网络上下文中工作?

转载 作者:IT王子 更新时间:2023-10-29 04:44:39 24 4
gpt4 key购买 nike

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

问题:

  1. 网站的每个客户/访问者的单例对象是唯一的吗?即,单例对象是否为每个客户端获得一个实例?
  2. Web 应用程序中的对象只会持续几秒钟,因此如果两个客户端同时访问一个网站,两个客户端都会尝试创建一个单例对象。这是否意味着会抛出访问者会看到的异常?我试过谷歌搜索,但找不到直接的答案。我只是想澄清一下。

最佳答案

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

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...等等)。

您需要询问您的同事他们指的是哪种方法,因为这两种方法在某些情况下都有效并且非常普遍。

关于c# - 单例模式如何在网络上下文中工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11362353/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com