Csharp/C#教程:DI和Singleton Pattern在一个实现中分享


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

上述就是C#学习教程:DI和Singleton Pattern在一个实现中分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/cdevelopment/1044175.html

(0)
上一篇 2022年2月2日
下一篇 2022年2月2日

精彩推荐