GitHub.md翻譯
iOS上Swift 5.1的超輕依賴注入/服務(wù)定位器框架。
介紹
依賴注入框架支持控制反轉(zhuǎn)設(shè)計(jì)模式关带。拋開技術(shù)上的依賴性新症,可以歸結(jié)為:
| 給一個(gè)對(duì)象提供它需要做的事情种蘸。
就這樣府蛇。依賴注入允許我們編寫松散耦合的代碼赁濒,因此局嘁,更易于重用、模擬和測(cè)試腕让。
詳細(xì)信息孤钦,請(qǐng)參見: A Gentle Introduction to Dependency Injection.
依賴注入策略
有六種典型的依賴注入策略:
- 界面注入Interface Injection
- 屬性注入Property Injection
- 構(gòu)造器注入Constructor Injection
- 方法注入Method Injection
- 服務(wù)定位器Service Locator
- 注解Annotation (NEW)
Resolver支持這6種策略。請(qǐng)按照鏈接進(jìn)行簡要說明纯丸、示例以及了解每種方法的優(yōu)缺點(diǎn)偏形。
屬性包裝器
Resolver現(xiàn)在支持在Swift5.1中使用新的屬性包裝語法解析服務(wù)。
class BasicInjectedViewController: UIViewController {
@Injected var service: XYZService
@LazyInjected var service2: XYZLazyService
}
只需添加注入關(guān)鍵字觉鼻,您的依賴項(xiàng)將自動(dòng)解析俊扭。參見 注釋 了解有關(guān)此策略和其他策略的更多信息。
特點(diǎn)
Resolver只用了300多行代碼實(shí)現(xiàn)坠陈,但它在這300行代碼中包含了大量特性萨惑。
- 自動(dòng)類型推斷
- 作用域:Application, Cached, Graph, Shared, and Unique
- Protocols
- Optionals
- Named Instances
- 參數(shù)傳遞
- 自定義容器和嵌套容器
- 循環(huán)依賴支持
- Storyboard支持
TLDR:如果沒有其他內(nèi)容,請(qǐng)確保您閱讀了有關(guān)自動(dòng)類型推斷仇矾、作用域和Optionals的內(nèi)容庸蔼。
TLDR應(yīng)該是英文中“太長不看”的意思。
使用Resolver
使用Resolver是一個(gè)簡單的三步過程:
安裝
Resolver支持CocoaPods和Swift包管理器粗合。
pod "Resolver"
Resolver本身只是一個(gè)源文件(Resolver.swift)萍嬉,所以下載文件并將其添加到項(xiàng)目中也很容易。
請(qǐng)注意隙疚,當(dāng)前版本的Resolver(1.1)支持Swift 5.1壤追,并且此版本當(dāng)前支持的iOS的最低版本是iOS11。
請(qǐng)閱讀安裝指南供屉,以獲取有關(guān)支持早期版本的信息行冰。
Resolver優(yōu)勢(shì)
如前所述,Resolver是一個(gè)超輕依賴注入系統(tǒng)伶丐,僅用300多行代碼實(shí)現(xiàn)悼做,并包含在單個(gè)文件中。
分解器也是為性能而設(shè)計(jì)的哗魂。例如SwinjectStoryboard肛走,是一個(gè)很好的依賴注入系統(tǒng),但是Resolver在解析依賴鏈時(shí)比Swinject快800%录别。
不同于其他一些系統(tǒng)朽色,Resolver是用100%的Swift 5語言編寫的邻吞,沒有OC代碼,方法轉(zhuǎn)換葫男,或內(nèi)部依賴關(guān)系在OC的runtime階段抱冷。
(這里的翻譯可能不太準(zhǔn)確,保留原文:
And unlike some other systems, Resolver is written in 100% Swift 5, with no Objective-C code, method swizzling, or internal dependencies on the Objective-C runtime.)
此外梢褐,Resolver還有以下優(yōu)點(diǎn):
- 在生產(chǎn)代碼中測(cè)試(經(jīng)過很多生產(chǎn)環(huán)境的測(cè)試旺遮?比較靠譜?)盈咳。
- 是線程安全的(假設(shè)您的對(duì)象是線程安全的)趣效。
- 有一套完整的單元測(cè)試。
- 是有據(jù)可查的猪贪。
Finally, with Automatic Type Inference you also tend to write about 40-60% less dependency injection code using Resolver.
最后,使用自動(dòng)類型推斷讯私,Resolver編寫的依賴注入邏輯大約可以減少40-60%的代碼量热押。
(這里的翻譯可能不太準(zhǔn)確,保留原文:
Finally, with Automatic Type Inference you also tend to write about 40-60% less dependency injection code using Resolver.)