Resolver-Swift版超轻依赖注入/服务定位器框架

GitHub.md翻译

icon

iOS上Swift 5.1的超轻依赖注入/服务定位器框架。

介绍

依赖注入框架支持控制反转设计模式。抛开技术上的依赖性,可以归结为:

| 给一个对象提供它需要做的事情。

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

详细信息,请参见: A Gentle Introduction to Dependency Injection.

依赖注入策略

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

  1. 界面注入Interface Injection
  2. 属性注入Property Injection
  3. 构造器注入Constructor Injection
  4. 方法注入Method Injection
  5. 服务定位器Service Locator
  6. 注解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是一个简单的三步过程:

  1. 将Resolver添加到项目中。
  2. 注册应用程序所需的类和服务。
  3. 在需要时使用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.)

你可能感兴趣的:(Resolver-Swift版超轻依赖注入/服务定位器框架)