.net - 单例与否

标签 .net windows-services singleton design-patterns

我有一个 Windows 服务正在运行。在此服务中,我托管了一些服务 (WCF)。
我需要某种“内存数据持有者”类。此类的目的是在 Windows 服务运行期间保存非持久性数据。
此类必须可通过 WCF 服务访问。他们将一些值放在此类中或从此类中检索一些值。

我首先想到的是一个单例类。我认为这种模式非常适合这种情况。但后来我读到一些帖子说单例类实际上并没有那么好。

那么这种情况有什么替代方案吗?或者这个单例可以吗?工厂方法呢?但是我在哪里可以找到对象的引用?

最佳答案

单例设计模式真的应该被重新标记为反模式。 这是邪恶的 .不要使用它。

更好的选择是使用 依赖注入(inject) (DI) 并注入(inject)一个类,您可以使用它来保存您需要的非持久数据。

很多人没有意识到 WCF 支持依赖注入(inject) (DI) 模式,例如 构造函数注入(inject) 没有太多麻烦。

如果您将注入(inject)的类限定为长期存在的对象(通常称为 Singleton 生命周期样式,但不要与 Singleton 设计模式混淆),您可以在调用之间继续访问相同的实例。

但是,无论何时使用共享对象(无论您使用 Singleton 作为设计模式还是终身风格),您都必须准备好处理 多线程问题 .

在许多其他事情中,this post描述了在没有默认构造函数时如何将依赖项注入(inject)到 WCF 服务实现中。

关于.net - 单例与否,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1921382/

相关文章:

grails - Grails 如何使 `params` 可用于单例 Controller ? (Grails 内部结构)

.net - 在 Azure 上托管现有 WCF 服务

java - 通过 android java 检测连接在网络上的计算机

c++ - 做OOP状态机设计时如何避免单例?

java - 单例客户端应该如何使用单例?

delphi - 双击Windows Service可执行文件进行配置

.net - List<T>.IsReadOnly 在哪里?

.net - Visual Studio 2008 : How to load source code while debugging

.net - 今天如何在 ASP.net MVC 4 中进行授权?

c# - 记录来自 Windows 服务的异常