GitHub.md翻译
iOS上Swift 5.1的超轻依赖注入/服务定位器框架。
介绍
依赖注入框架支持控制反转设计模式。抛开技术上的依赖性,可以归结为:
| 给一个对象提供它需要做的事情。
就这样。依赖注入允许我们编写松散耦合的代码,因此,更易于重用、模拟和测试。
详细信息,请参见: A Gentle Introduction to Dependency Injection.
依赖注入策略
有六种典型的依赖注入策略:
- 界面注入Interface Injection
- 属性注入Property Injection
- 构造器注入Constructor Injection
- 方法注入Method Injection
- 服务定位器Service Locator
- 注解Annotation (NEW)
Resolver支持这6种策略。请按照链接进行简要说明、示例以及了解每种方法的优缺点。
属性包装器
Resolver现在支持在Swift5.1中使用新的属性包装语法解析服务。
class BasicInjectedViewController: UIViewController {
@Injected var service: XYZService
@LazyInjected var service2: XYZLazyService
}
只需添加注入关键字,您的依赖项将自动解析。参见 注释 了解有关此策略和其他策略的更多信息。
特点
Resolver只用了300多行代码实现,但它在这300行代码中包含了大量特性。
- 自动类型推断
- 作用域:Application, Cached, Graph, Shared, and Unique
- Protocols
- Optionals
- Named Instances
- 参数传递
- 自定义容器和嵌套容器
- 循环依赖支持
- Storyboard支持
TLDR:如果没有其他内容,请确保您阅读了有关自动类型推断、作用域和Optionals的内容。
TLDR应该是英文中“太长不看”的意思。
使用Resolver
使用Resolver是一个简单的三步过程:
安装
Resolver支持CocoaPods和Swift包管理器。
pod "Resolver"
Resolver本身只是一个源文件(Resolver.swift),所以下载文件并将其添加到项目中也很容易。
请注意,当前版本的Resolver(1.1)支持Swift 5.1,并且此版本当前支持的iOS的最低版本是iOS11。
请阅读安装指南,以获取有关支持早期版本的信息。
Resolver优势
如前所述,Resolver是一个超轻依赖注入系统,仅用300多行代码实现,并包含在单个文件中。
分解器也是为性能而设计的。例如SwinjectStoryboard,是一个很好的依赖注入系统,但是Resolver在解析依赖链时比Swinject快800%。
不同于其他一些系统,Resolver是用100%的Swift 5语言编写的,没有OC代码,方法转换,或内部依赖关系在OC的runtime阶段。
(这里的翻译可能不太准确,保留原文:
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还有以下优点:
- 在生产代码中测试(经过很多生产环境的测试?比较靠谱?)。
- 是线程安全的(假设您的对象是线程安全的)。
- 有一套完整的单元测试。
- 是有据可查的。
Finally, with Automatic Type Inference you also tend to write about 40-60% less dependency injection code using Resolver.
最后,使用自动类型推断,Resolver编写的依赖注入逻辑大约可以减少40-60%的代码量。
(这里的翻译可能不太准确,保留原文:
Finally, with Automatic Type Inference you also tend to write about 40-60% less dependency injection code using Resolver.)