- 什么时候应该使用属性注入?
- 如果在完全控制的情况下创建实例,我应该默认使用构造函数注入吗?
- 我是否正确使用构造函数注入来编写容器不可知的代码?
5
A
回答
9
什么时候应该使用属性注入?
如果依赖关系是真正可选的,当您具有本地默认值或对象图包含循环依赖关系时,您应该使用属性注入。
然而,财产注入导致Temporal Coupling,并在编写业务线应用程序时,您的依赖关系不应该是可选的:您应该改为应用Null Object pattern。
也不应该使用本地默认值,因为这会使测试变得复杂,隐藏依赖性,并且使得忘记配置依赖关系变得非常容易。
对象图也不应该具有循环依赖性。这是应用程序设计中的indication of a problem。
我应该使用默认构造函数注入如果实例创建完全控制?
是的。建设者注入是最好的方法。它使得查看类的依赖关系变得非常容易,可以使依赖关系成为必需,并防止时间耦合。
我说得对,使用构造函数注入我写容器不可知的代码?
这是正确的。构造器注入允许您延迟决定使用哪个DI库,以及whether at all you use a DI library。
针对上述情况,以及更多更详细的解释,读这本书由Mark SeemannDependency Injection in .NET(和我),这是去到引导,当谈到了解DI和它的基本模式和原则。
相关问题
- 1. 使用@Named注入属性
- 2. SimpleInjector不使用隐式注入属性注入属性
- 3. 不使用属性的属性注入[注入]与Ninject
- 4. Spring在使用@Value进行注释时如何注入属性?
- 5. 如何在使用StructureMap时为属性使用自定义注入属性?
- 6. 注入属性?
- 7. 使用依赖注入时,如何忽略缺失的属性?
- 8. 如何在使用Castle Windsor时注入属性
- 9. 当使用mootools注入文本输入时缺少值属性
- 10. 用Spring注入属性?
- 11. 使用Spring&annotation注入属性@Value
- 12. 使用autofac的属性注入3.1.1
- 13. 使用Google Guice注入java属性
- 14. NserviceBus属性注入
- 15. Autofac惰性属性注入
- 16. 使用属性注入而不是构造函数注入
- 17. 使用统一属性注入注入简单字符串
- 18. 在MSBuild中使用注册表属性时引用属性?
- 19. 当使用StructureMap和NServiceBus时,属性注入不起作用
- 20. 使用属性注入与受保护的属性getter
- 21. Autofac属性注入属性失败
- 22. C#MEF设置属性/属性注入
- 23. 使用Autofac时属性注入是否懒惰?
- 24. 在使用@Autowired时向Spring bean注入基本属性?
- 25. UIDocumentInteractionController注释属性使用
- 26. 使用spring注释注入p命名空间属性
- 27. jquery属性注入索引
- 28. Ninject WCF:属性注入
- 29. EJB3.1属性文件注入
- 30. 注入静态属性值
属性注入不应该与默认构造函数结合使用,所以它应该是通过DI容器构造对象的唯一方法。所以属性注入也许可以用于当你有太多的依赖关系,你不想要一个很长的构造函数签名:) – hB0
@ hB0这实际上是非常糟糕的建议。如果你有一个带有许多参数的构造函数,你的代码告诉你,你违反了单责任原则。使用属性不会解决根本问题:您的课程太大;它应该分成更小,更集中的班级。 – Steven
你是对的,但它不是一个建议,但是在类已经混乱的情况下使用属性注入的合理情况,否则使用构造函数注入总是更好。这是我评论但没有回答的原因,因为这不是一个好方法。 – hB0