Prism:結語
prism基本功能也已經學完了,在學習過程中遇到過很多問題,其中就有一點條我就一直困惑,那就是:依賴注入
什麼是依賴注入:(gpt寫的)
依賴注入(Dependency Injection,簡稱 DI) 是一種設計模式和程式設計技術,用於實現控制反轉(Inversion of Control,IoC)。它透過將物件的依賴項從物件內部移到外部來減少元件之間的耦合,提高程式碼的可維護性和可測試性。
我的理解:高層原本是依賴於低層,但是為了降低耦合性,我們常常會建立一個介面,讓低層與繼承這個介面,這樣我們最終就是:
高層依賴於抽象,而低層去實現這個抽象
這樣還是不行,因為在初始化的時候依舊會new一個物件,低層透過帶抽象引數的方法注入其中,new依舊是不解耦的,這時就可以透過控制反轉(IOC)去掉new關鍵字。
下面打個比喻:
傳統:A new 一個 B ,也就是A 控制 B
使用控制反轉(IOC)後:A就把這個權力反轉給了這個容器(prism中註冊檢視、module等),當A需要B的時候,由容器把B給注入進來(不用new關鍵字,prism中透過建構函式的方式來注入的),這個就叫依賴注入。總的來說,控制反轉與依賴注入是離不開的。
第2個困惑是Prism中註冊與注入的區別:
註冊 (Registration)
註冊是指向依賴注入容器中新增型別及其生命週期的過程。當你註冊一個型別時,你實際上是告訴容器如何建立該型別的例項以及如何管理它的生命週期。註冊通常發生在應用程式啟動階段,在 Bootstrapper
類的 RegisterTypes
方法中完成。
註冊的時機
- 初始化階段:在應用程式啟動時,通常在
RegisterTypes
方法中進行註冊。 - 模組載入時:模組可以註冊它們自己的型別和服務。
注入 (Injection)
注入是指依賴注入容器在執行時建立物件併為其注入所需依賴項的過程。依賴注入有助於降低元件之間的耦合度,使程式碼更加靈活和易於測試。
注入的時機
- 建構函式注入:最常用的方式,依賴項透過建構函式傳遞給物件。
- 屬性注入:依賴項透過屬性賦值。
- 方法注入:依賴項透過方法引數傳遞。
在Prism原始碼中,已經提前向IOC容器注入瞭如下內容: