适用于 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 许可证下使用。有关详细信息,请参阅许可证文件。