我想更好地瞭解IoC容器是如何工作的,併爲自己編寫一些代碼。爲容器創建類時是否有最佳做法?是單身嗎?它是靜態的嗎?它不是一個單身人士,但只是有一堆靜態屬性來保存解析對象?是IoC容器單身還是靜態?
2
A
回答
1
我知道的IoC容器既不是靜態的,也不是單身的,我看不出有什麼好的理由讓它們成爲現實。只要將它製作成一個普通的類並創建它的實例即可。有些情況下您可能想要使用多個實例來分離獨立的問題。
正如你想保持你的組件不知道容器,即不要讓它們引用容器。如果您的組件(容器正在解析的對象)需要能夠訪問容器以獲取新實例,則通常會爲此抽象接口(通常稱爲Service Locator Pattern(.NET,但它們都是相同的)),並讓容器注入到組件中。同樣,靜態類或方法沒有理由。
遵循這種做法的一個很好的理由是,您可以交換容器實現,例如切換到「專業」IoC框架,而無需觸摸組件。
除此之外,通常對靜態類和方法有一些限制,通常不需要,特別是當系統可能發生變化,增長和變得複雜時。提到兩點:靜態類不能實現接口。因此,您絕對不能爲了測試而嘲笑您的容器;容器的每次使用都需要對容器組件的固定引用,而不是對合同的引用。你不能繼承一個靜態類;
相關問題
- 1. 是t1靜態還是非靜態?
- 2. IoC容器 - 單例還是繞過實例?
- 3. 單身或靜態類還是兩者都不?
- 4. IoC:使用靜態IoC容器進行依賴注入
- 5. 靜態var,方法還是單例?
- 6. SASS是動態的還是靜態的?
- 7. 「公共靜態」還是「靜態公共」?
- 8. 靜態還是在C#
- 9. 模型的泛型超類應該是靜態還是單態?
- 10. 單例模式:靜態還是靜態最終?
- 11. 我應該使用嵌套類還是IoC容器?
- 12. 靜態單身?
- 13. 知道.lib是靜態還是導入
- 14. 使用「最終靜態」還是「靜態最終」是否正確?
- 15. Java中的類是靜態還是非靜態?
- 16. 使用靜態還是非靜態是一個好主意? (Android)
- 17. 模板:靜態類型還是動態?
- 18. Spring IoC容器如何能夠創建新的對象?還是Spring IoC容器在內部工作?
- 19. 工廠類應該是單例還是靜態方法?
- 20. 爲什麼MEF不是DI/IoC容器?
- 21. C#的動態密鑰是否會棄用靜態IOC模式?
- 22. .NET中IoC容器的當前狀態是什麼?
- 23. 使用IoC容器從靜態方法中解析類型
- 24. 身份驗證類應該是靜態的還是從實例創建的?
- 25. 靜態庫 - 調試還是發佈?
- 26. ==還是比較最終靜態字段
- 27. 我應該使用SingleTone還是靜態?
- 28. Java靜態 - 方法還是字段?
- 29. 虛擬方法是指動態還是靜態類型?
- 30. 檢測公有IP地址是動態還是靜態
許多IoC容器允許您將一個類標記爲單例。無論何時向容器請求該類的對象,它都會查看該對象是否已在之前創建並將已創建的對象返回。您如何在多個類中實現這一目標,而無需將IoC對象傳遞給每個創建的對象? – David
單例服務的實例只在一個容器實例的範圍內共享。使用多個容器只有在每個容器都有自己的工作域時纔有意義,而沒有任何相互依賴性。在一個正常的應用程序中,您將在啓動順序中創建一個容器,大多數情況下在啓動後立即啓動,然後使用此實例解決所有問題。 – Marc
啊我明白了。我正在爲Android開發。我想這就是爲什麼已經有DI框架的原因,因爲Android爲你創建了一些你無法控制的對象。 – David