- 什麼時候應該使用屬性注入?
- 如果在完全控制的情況下創建實例,我應該默認使用構造函數注入嗎?
- 我是否正確使用構造函數注入來編寫容器不可知的代碼?
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