依赖注入与工厂模式的区别

575
大多数关于依赖注入使用的例子,我们也可以使用工厂模式来解决。看起来在使用/设计时,依赖注入和工厂之间的区别模糊或微小。
有人曾经告诉我,它的不同在于你如何使用它!
我曾经使用StructureMap作为DI容器来解决问题,后来重新设计为使用简单的工厂,并删除了对StructureMap的引用。
有人能告诉我它们之间的区别以及在何处使用什么,这里最好的实践是什么?

27
这两种方法不能互相补充吗:使用依赖注入来注入工厂类? - Richard Ev
21
如果这个问题有一些代码作为答案会很好!我还是不明白依赖注入与使用工厂来创建有什么好处/区别?只需要在工厂类中更改一行代码即可更改创建的对象/实现,这不就可以了吗? - gideon
2
@gideon 那不会强制你编译你的应用程序,或者至少是包含工厂类的模块吗? - lysergic-acid
1
@liortal 是的,没错。自从那条评论以来,我进行了长时间的依赖注入研究,现在我明白 DI 将工厂方法推进了一步。 - gideon
1
看看这个很棒的答案:https://dev59.com/5W445IYBdhLWcg3wNXc_ - 他表达得非常清晰,并提供了代码示例。 - Luis Perez
显示剩余4条评论
31个回答

-4

在我看来,如果你正在: 1. 将代码部署在小分区中,使用依赖注入会更好,因为它可以很好地处理一个大代码的解耦。 2. 可测试性是 DI 可以使用的情况之一,因为你可以轻松地模拟非解耦对象。通过使用接口,你可以轻松地模拟和测试每个对象。 3. 你可以同时修改程序的每个部分,而不需要编写其它部分的代码,因为它们是松散耦合的。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接