適用於 iOS 上 Swift 5.x 的超輕依賴注入/服務定位器框架。
注意:Resolver 現已正式棄用,並由我的新相依性注入系統 Factory 取代。 Factory 是一個真正的基於容器的依賴注入系統,它是編譯時安全的,並且比 Resolver 更小、更輕、更快。與 Resolver 一樣好,Factory 更好。
依賴注入框架支援控制反轉設計模式。除了技術定義之外,依賴注入幾乎可以歸結為:
|為物件提供完成其工作所需的東西。
就是這樣。依賴注入允許我們編寫鬆散耦合的程式碼,因此更容易重複使用、模擬和測試。
有關更多信息,請參閱:依賴注入簡單介紹。
有六種經典的依賴注入策略:
解析器都支援它們。按一下連結以取得簡要說明、範例以及每種方法的優缺點。
說到註釋,Resolver 現在支援使用 Swift 5.1 中新的屬性包裝器語法來解析服務。
class BasicInjectedViewController : UIViewController {
@ Injected var service : XYZService
@ LazyInjected var service2 : XYZLazyService
@ WeakLazyInjected var service3 : XYZAnotherLazyService ?
}
只需新增 Injected 關鍵字,您的依賴項就會自動解決。有關此策略和其他策略的更多信息,請參閱註釋文檔。
還有一個@InjectedObject
包裝器,可以在 SwiftUI 視圖中註入 Observable 物件。
Resolver 在單一檔案中僅以 700 多行實際程式碼實現,但它在這 700 行中包含了大量功能。
TLDR:如果沒有別的事情,請確保您閱讀了自動類型推斷、範圍和選項。
使用 Resolver 是一個簡單的三步驟過程:
如前所述,Resolver 是一個超輕量依賴注入系統,僅使用 700 多行程式碼即可實現,並包含在單一檔案中。
旋轉變壓器也是為了性能而設計的。例如,SwinjectStoryboard 是出色的依賴項注入系統,但 Resolver 在解析依賴項鍊方面比 Swinject 快約 800%。
與其他一些系統不同,Resolver 是用 100% Swift 5 編寫的,沒有 Objective-C 程式碼、方法混合或對 Objective-C 運行時的內部依賴。
此外,解析器:
最後,透過自動類型推斷,您也可以使用 Resolver 編寫大約 40-60% 的依賴注入程式碼。
Resolver 支援 CocoaPods 和 Swift 套件管理器。
pod " Resolver "
Resolver 本身只是一個原始檔案 (Resolver.swift),因此只需下載該檔案並將其添加到您的專案中也很容易。
請注意,目前版本的 Resolver (1.4) 支援 Swift 5.3,而此版本目前支援的最低 iOS 版本是 iOS 11。
請閱讀安裝指南以獲取有關支援早期版本的資訊。
我已將我的 Builder 存儲庫公開。這是一個簡單的主/細節風格的 iOS 應用程序,其中包含...
我還用它來玩一些新程式碼,這些程式碼使用 SwiftUI 風格的建構器模式來建立使用者介面結構和網路請求。一探究竟。
最近對 Resolver 的更新可能會導致程式碼庫發生重大變更。
Resolver 1.4 改進了線程安全性和效能。儘管現在不建議直接存取解析器的範圍,但沒有重大變更。請參閱:範圍。
Resolver 1.3 為 Resolver 增加了命名空間。註冊名稱可以實現更好的自動完成,並透過減少潛在的運行時評估錯誤使程式碼更安全。這可能是一個重大變化。請參閱:命名實例
Resolver 1.2 更改了參數傳遞到註冊工廠的方式,以便為傳遞和處理單一和多個參數提供更好的支援。這是一個突破性的改變。請參閱:傳遞和處理多個參數
Resolver 1.5 更新了 Resolver 中使用的一些註冊和快取機制。除非您編寫了一些依賴解析器內部行為的內容,否則這可能不是問題。
如果您想支持我在 Factory 和 Resolver 上的工作,請考慮 GitHub 贊助!存在許多層級來增加支持,甚至用於指導和公司培訓。
或者你可以買杯咖啡給我!
Resolver 由首席 iOS 軟體工程師和 Medium 前 1,000 名技術作家 Michael Long 設計、實現、記錄和維護。
Michael 也因其在 Resolver 方面的工作而成為 2021 年 Google 開源同行獎勵得主之一。
解析器可在 MIT 許可證下使用。有關詳細信息,請參閱許可證文件。