DI和Singleton Pattern在一个实现中

Ton*_*ion 6 c# inversion-of-control

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

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

Mar*_*ann 6

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

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

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

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

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

  • 如果您的DI容器实现了一个接口,而它恰好是一个Singleton,那么它就不会违反OCP - 它只是一个实现细节.危险在于,因为它是一个Singleton,它可以在任何地方使用,所以没有经验的开发人员可能会直接使用它,从而无意中产生紧密耦合. (2认同)