c# - 缩放单例

标签 c# wcf design-patterns anti-patterns

在为我的基于服务器的应用程序考虑了一些架构问题之后,我觉得我将不得不使用单例来实现我的目标。纯粹出于以下原因(证明我的气味是正确的):

  • 我不需要将昂贵的对象深入调用堆栈
  • 我可以在任何上下文中对单例管理对象执行功能。 (很多代码已经存在,因此我不愿意重写大量其他工作代码)

除此之外,单例提出了另一个问题。我的基于服务器的应用程序本质上是一个 DLL,其中包含一个可以调用多个服务器实例的类。服务器实例类包含单例管理对象。通常,这将由 Windows 服务管理,因此服务器与机器的比例为 1:1。

因此您可以将其视为(其中 -> 是 1:1,=> 是 1:many):

MACHINE -> ServiceHost(Windows 服务?) -> 服务器实例 -> 单例管理对象

但是,我们希望允许 SaaS 模型,该模型需要服务主机(Windows 服务或 Win32 应用程序)能够根据业务需要启动多个服务器。因此,物理机可以运行单个服务器主机,而该服务器主机将运行多个服务器实例。

这将是(其中 -> 是 1:1,=> 是 1:many):

MACHINE -> ServiceHost(Windows 服务?)=> 服务器实例 -> 单例管理对象

问题是这些单例会跨服务器共享。这不可能发生。单例必须与服务器实例 1:1。

假设我无法摆脱这些单例,我是否可以通过调用服务实例类作为单独的进程/内存空间来将这些服务器实例彼此分开?

我只能想象我需要启动多个 EXE(并使用 WCF 进行管理),每个服务器实例一个。这显然不是很好。

最佳答案

不同“实例”的不同 AppDomain 怎么样?

关于c# - 缩放单例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2027263/

相关文章:

c# - WCF:base.Channel 调用中不存在指定的注册表项

c# - 如何使用 EF6、MVC 和 MOQ 有效地模拟数据上下文以进行单元测试

c# - ASP.NET MVC 4 异步 Controller 回调

c# - 在 MS Teams channel 中发布时,聊天机器人名称包含在用户话语中,从而向 LUIS 提供了不正确的话语

c++ - 创建实例化所有其他类和子系统的类的目的是什么

javascript - 如何在客户端实现服务器更新监听器

asp.net-mvc-3 - 策略模式在 Asp.net MVC 3.0 中创建与 Controller 类的依赖关系

c# - 我们如何在表单应用程序的标签中放置自定义日期格式?

Silverlight 服务 codegen 只创建异步函数调用? (SLsvcUtil.exe)

c# - 在 WCF 服务中调用 Sitecore Database.Templates[] 时出现 NullReferenceException