DI和Singleton Pattern在一个实现中

我想使用Windsor IOC / DI框架重构一些代码,但我的问题是我有一些Singleton类和Factory模式类,我不确定是否可以使用DI实现Singleton或Factory。

有没有人有任何想法,如果有可能,怎么样?

Singleton设计模式与DI不一致。 虽然可以打开单身人士以至于DI和开放/封闭原则开始变得有意义,但这会使Singleton变得如此之多以至于它几乎不再是一个单身人士。

线程安全是您开始打开Singleton时想到的一个大问题。

简单地定义您的服务和类而不考虑它们的范围太多会好得多。 如果您有一个想要在多个消费者之间共享的对象,大多数DI容器都具有Singleton 生命周期的概念,它模仿Singleton设计模式的好处而不会遇到任何缺点。

简而言之:单身人士是邪恶的,应该避免。

另一方面, 抽象工厂对于DI目的非常有用。

你没有,你让IOC容器做到了。 在您明确调用工厂获取对象的单例实例之前,现在您可以让IOC容器为您创建对象图,并将所有内容挂钩到它所属的位置。 容器确保你的单身人士是单身人士,并充当工厂。

如果您正在讨论让工厂在运行时决定要提供什么样的对象,那么DI不适用于那里,除非您可以让DI容器将工厂注入您想要的工厂并为您管理其范围。

大多数现代dependency injection框架允许您指定它们是应该在应用程序(或请求)的生命周期内提供单个对象实例,还是在每次请求时创建新实例。

您也可以使用DI框架在适当的时候解决工厂的依赖关系(如果这就是您的意思)。 如果工厂根据运行时数据选择子类,或者依赖对象需要创建许多IFoo实例,则可以执行此操作,在这种情况下,您可能会注入IFooFactory