簡單來說和/或在高級僞代碼中,DI容器是如何工作的以及它是如何使用的?DI容器如何工作的最簡單解釋?
回答
DI容器的核心是基於接口和具體類型之間的映射創建對象。
這將允許用戶從容器請求一個抽象類型:
IFoo f = container.Resolve<IFoo>();
這需要你有先前配置容器以從IFoo的映射到實現的IFoo(例如富的具體類)。
這本身就不是特別令人印象深刻,但DI容器做多:
- 他們使用自動裝配這意味着它們可以自動計算出,如果IFoo的映射到Foo和伊巴爾映射到Bar,但是Foo依賴於IBar,當你請求IFoo時,它會創建一個帶有Bar的Foo實例。
- 他們管理組件的使用壽命。你很多時候都想要一個新的Foo實例,但在其他情況下,你可能需要同一個實例。您甚至可能每次都需要新的Foo實例,但注入的Bar應該保持相同的實例。
一旦你開始嘗試手動管理組成和壽命你應該開始欣賞由DI容器:)提供的服務
很多DI容器可以做得比上面的要多得多,但這些是核心服務。大多數容器提供configuring via either code or XML的選項。
當涉及到適當的使用的容器,Krzysztof Kozmic剛剛公佈a good overview。
您可以配置一個DI容器,以便了解您的接口和類型 - 每個接口如何映射到某個類型。
當您調用Resolve
時,它會查看映射並返回您請求的映射對象。
一些DI容器使用約定而不是配置,例如,如果您定義了一個接口ISomething
,它將查找具體的Something
類型來實例化並返回。
「沒什麼比對象的花式哈希表 更多。」
雖然上面是一個巨大的輕描淡寫那是想着他們的簡單方法。鑑於收集,如果你要求一個類的同一個實例--DI容器將決定是否給你一個緩存版本或新的,或以此類推。
他們的使用使得它更容易和更乾淨,當涉及到配合依賴。想象一下你有以下僞類。
class House(Kitchen, Bedroom)
// Use kitchen and bedroom.
end
class Kitchen()
// Code...
end
class Bedroom()
// Code...
end
構建的房子是沒有DI容器中的疼痛,你需要創建一個臥室的一個例子,接下來是廚房的一個實例。如果這些對象也有依賴關係,則需要將它們連接起來。反過來,你可以花費很多代碼來連接對象。只有這樣你才能創造一個有效的房子。使用DI/IOC(Inversion of Control)容器,你說你想要一個房子對象,DI容器將遞歸地創建它的每個依賴關係並返回給你一間房子。
沒有DI/IOC容器:
使用DI/IOC容器:
house = // some method of getting the house
在這一天結束時,他們使代碼容易執行,更容易編寫和責任推卸將物體連接在一起,遠離手頭的問題。
應該指出,DI是好的,因爲它阻止你不必編寫自己的複雜構造函數和自己的代碼來配置事物和一堆其他類似的東西。雖然是的,你不需要*它,它是很好的能夠利用現有的庫來處理所有這些東西給你。它使得配置Java應用程序(C#不是我的專業領域)看起來有點像使用一種可憐的,不一致的,過於複雜的腳本語言...... – 2010-06-22 19:47:38
- 1. Angular2簡單的DI不工作
- 2. py2exe是如何實際 - 簡單地解釋 - 工作? :)
- 3. 簡單的解釋
- 4. 命令行解釋器如何工作?
- 5. 如何選擇DI容器?
- 6. 如何以最簡單的方式解釋'this'關鍵字?
- 7. 解釋Jint如何工作
- 8. 使用Haskell的簡單解釋器
- 9. 計劃中的簡單解釋器
- 10. 有人能解釋我這個簡單的功能是如何工作的
- 11. MapReduce的簡單解釋?
- 12. PHP DI容器
- 13. 如何在簡單構建工具項目中調用scala解釋器?
- 14. 將Facebook分享按鈕與動態內容集成的最簡單的解釋
- 15. 最簡單的嵌套塊解析器
- 16. 最簡單的Shaka球員不工作
- 17. 最簡單的規則不工作
- 18. 簡單jquery.ajax /例如的WebMethod不工作 - 如何解決
- 19. 如何創建Aura DI容器?
- 20. SICP最後兩章的簡短解釋
- 21. clojure程序/編譯器/解釋器如何實際「工作」?
- 22. 在Haskell中解析一個簡單的解釋器
- 23. 簡單的解釋器錯誤地解析文件
- 24. Laravel解釋我如何工作查詢
- 25. 避免容器。在簡單工廠解決?
- 26. 與symfony的DI容器
- 27. 簡單的SQLAlchemy關係如何工作?
- 28. 什麼是最簡單的解釋什麼是Hadoop和Map/Reduce?
- 29. 最簡單的方法來解釋句子
- 30. 簡單的Python和需要解釋
短而甜,無毒類汽車類比! – Shog9 2010-06-22 19:38:19