Resolver icon

一个超轻量的 Swift 5.x iOS 依赖注入/服务定位器框架。

注意:Resolver 现在已正式弃用,并被我的新依赖注入系统 Factory 取代。 Factory 是一个真正的基于容器的依赖注入系统,具有编译时安全特性,并且比 Resolver 更小、更轻、更快。 尽管 Resolver 很好,但 Factory 更好。

简介

依赖注入框架支持 控制反转 设计模式。 抛开技术定义,依赖注入实际上归结为:

| 给对象提供它完成工作所需的东西。

就是这样。 依赖注入使我们能够编写松散耦合的代码,因此更容易重用、模拟和测试。

更多信息,请参阅: 依赖注入的简单介绍。

依赖注入策略

有六种经典的依赖注入策略:

  1. 接口注入
  2. 属性注入
  3. 构造器注入
  4. 方法注入
  5. 服务定位器
  6. 注解 (新增)

Resolver 支持所有这些策略。 点击链接查看简要描述、示例以及每种策略的优缺点。

属性包装器

说到注解,Resolver 现在支持使用 Swift 5.1 中的新属性包装器语法来解析服务。

class BasicInjectedViewController: UIViewController {
    @Injected var service: XYZService
    @LazyInjected var service2: XYZLazyService
    @WeakLazyInjected var service3: XYZAnotherLazyService?
}

只需添加 Injected 关键字,您的依赖项将自动解析。 有关此策略和其他策略的更多信息,请参阅 注解 文档。

还有一个 @InjectedObject 包装器,可以在 SwiftUI 视图中注入 Observable Objects。

特性

Resolver 仅用单个文件中 700 多行实际代码实现,但它将大量功能融入到这 700 行代码中。

TLDR:如果没有其他内容,请务必阅读关于 自动类型推断作用域可选类型 的内容。

使用 Resolver

使用 Resolver 是一个简单的三步过程:

  1. 将 Resolver 添加到您的项目中。
  2. 注册您的应用程序所需的类和服务。
  3. 在需要时使用 Resolver 解析这些实例。

为什么选择 Resolver?

如前所述,Resolver 是一个超轻量级的依赖注入系统,仅用 700 多行代码实现,并包含在单个文件中。

Resolver 还专为性能而设计。 例如,SwinjectStoryboard 是一个很棒的依赖注入系统,但 Resolver 在解析依赖链方面的速度比 Swinject 快约 800%。

与某些其他系统不同,Resolver 使用 100% Swift 5 编写,没有 Objective-C 代码、方法调配或对 Objective-C 运行时的内部依赖。

此外,Resolver:

最后,使用 自动类型推断,您还可以使用 Resolver 编写减少约 40-60% 的依赖注入代码。

安装

Resolver 支持 CocoaPods 和 Swift Package Manager。

pod "Resolver"

Resolver 本身只是一个单独的源文件 (Resolver.swift),因此也很容易直接下载该文件并将其添加到您的项目中。

请注意,当前版本的 Resolver (1.4) 支持 Swift 5.3,并且此版本当前支持的 iOS 最低版本为 iOS 11。

阅读 安装指南 以获取有关支持早期版本的信息。

演示应用程序

我已经公开了我的 Builder 仓库。 这是一个简单的 master/detail 样式的 iOS 应用程序,其中包含以下示例:

  1. 使用 Resolver 依赖注入系统来构建 MVVM 架构。
  2. 使用 Resolver 模拟用户数据以进行应用程序开发。
  3. 使用 Resolver 模拟用户数据以进行单元测试。

我还使用它来尝试一些新代码,这些代码使用 SwiftUI 样式的构建器模式来构造用户界面和构造网络请求。 看看吧。

Resolver 更新说明

最近对 Resolver 的更新可能会导致您的代码库出现重大更改。

赞助 Resolver

如果您想支持我在 Factory 和 Resolver 上的工作,请考虑 GitHub 赞助! 存在许多级别可以增加支持,甚至可以提供指导和公司培训。

或者你可以请我喝杯咖啡!

作者

Resolver 由 Michael Long 设计、实现、记录和维护,他是一位首席 iOS 软件工程师,也是 Medium 上排名前 1,000 的技术作家。

Michael 也是 Google 在 2021 年因他在 Resolver 上的工作而获得的 开源同行奖励 获奖者之一。

许可证

Resolver 在 MIT 许可证下可用。 有关更多信息,请参见 LICENSE 文件。

其他资源