依賴注入的一個優點是類的依賴性在其接口(即構造函數)中顯式定義。但是,如果使用依賴注入容器,則這些依賴關係中的很多依賴項會合併到一個依賴項(容器)中。因此,許多類的真正依賴關係隱藏在容器後面。如何避免這種情況,以便依賴關係在使用依賴注入容器時仍被明確定義?使用依賴注入容器時明確依賴關係
2
A
回答
0
我3年前問這個問題,並有因爲來了解和熱愛DI在靜態類型語言。
它看起來就像當我問這個問題我不明白「服務定位器」和「依賴注入容器」(DIC)之間的差異。
甲DIC操作「下面」的應用程序,負責構造對象,建立對象圖,通常在自舉,但如果充分自舉的應用之前。 班級不應該知道DIC,不應該依賴它。 DIC應該構造該類的所有依賴關係,並將它們注入,就好像類正在手動實例化一樣。
服務定位器是一個傳遞給系統並用於查找依賴關係的對象。使用服務定位器掩蓋了依賴關係(我在學習這些東西時注意到的原始問題),並創建了系統範圍的依賴關係(即服務定位器本身)。
一般來說,我會避免的服務定位器模式(有人稱之爲「反模式」)。使用Ninject或Symfony 2的DIC等良好的DIC將讓您的課程專注於其中的業務邏輯 - 而不是尋找依賴關係。
上依賴注入閱讀馬丁福勒斯文章:http://www.martinfowler.com/articles/injection.html
0
看來你可以使用'取決於-on屬性在bean定義添加到您的代碼中顯式依賴。我發現這裏
0
是一個類似的問題也沒有,這真的取決於你如何依賴注入容器的作品。
我看不出有任何問題,這種代碼:
class Class1 {
/**
* @Inject
* @var Class2
*/
private $class2;
}
即使依存度將通過容器注入,即Class1
取決於Class2
其實是相當明確的。 (這裏使用依賴注入容器是PHP-DI)
相關問題
- 1. 使用依賴注入容器時靜態確定缺失的依賴關係
- 2. 注入依賴關係
- 3. 如何在決定使用哪個依賴項時注入依賴關係需要使用依賴關係
- 4. C#依賴注入 - 如何注入無源的依賴關係?
- 5. 使用依賴注入來注入依賴注入器
- 6. 使用Ninject注入AutoMapper依賴關係
- 7. 依賴注入容器PHP
- 8. php依賴注入容器
- 9. 依賴注入容器
- 10. 依賴注入 - 注入容器還是個人依賴?
- 11. OOP依賴關係:依賴注入與註冊
- 12. 依賴注入和依賴不使用
- 13. 依賴關係的nuget依賴關係
- 14. 使用容器進行依賴注入
- 15. ASP.NET MVC視圖依賴注入無依賴關係解析?
- 16. .NET Web API 2依賴注入 - 依賴關係列表
- 17. 依賴注入框架 - 依賴關係傳播
- 18. JSR 330依賴注入器如何在構建時驗證依賴關係?
- 19. 註解 - JAR依賴關係
- 20. 流明依賴注入
- 21. Makefile中的明確鏈依賴關係
- 22. 使用java註釋注入記錄器依賴關係
- 23. 依賴關係
- 24. 確定.exe依賴關係
- 25. PHP路由器/分派器,依賴注入,傳遞依賴關係
- 26. 引入依賴關係打破了現有的依賴關係?
- 27. 依賴注入
- 28. 依賴注入
- 29. 依賴注入
- 30. 依賴注入
沒有一貫地採用構造器注入類取決於DI容器。你*可能*使用一個容器來連接這些類,但是你不需要。這不夠明確嗎? – 2012-03-18 08:15:02
如果A類是使用DI容器構造的,並且A具有-A B,B具有C,那麼C如何訪問其所需的依賴關係?如何將類放在調用堆棧訪問相關的幾個級別上? – orourkedd 2012-03-18 16:10:31
它們也使用構造函數注入。所以如果C依賴於D,它就通過它的構造函數獲取它。 – 2012-03-18 17:21:42