SwiftResolver 1.0.11

SwiftResolver 1.0.11

测试已测试
语言语言 SwiftSwift
许可 MIT
发布最后发布2019年4月
SPM支持 SPM

Vinicius Rodrigues 维护。



SwiftResolver

Swift 语言的依赖注入框架。

使用

container.register { MyService() as Service }
...
let service: Service = container.resolve()

更详细的使用案例可以在 wiki 页面 找到。

安装

pod 'SwiftResolver'

同一协议的多个实现

您可以在同一个容器中注册同一协议的多个实现。以后,在解析时,可以将特定实现的具体类型作为参数传递以获取正确的实现类型。

container.register(MyService.init).as(ServiceProtocol.self)
container.register(OtherService.init).as(ServiceProtocol.self)
...
let service: ServiceProtocol = container.resolve(MyService.self) // instance of MyService is returned here

多种配置

您可以将具有不同配置的同一对象的多个实现进行注册。之后,在解析时,可以通过将实现标识符作为参数传递来获取具有正确配置的实例。

enum MyServices: String {
    case mock
    case live
}

container.register { MyService(requestProvider: liveRequestProvider) as Service }.tag(MyServices.live)
container.register { MyService(requestProvider: mockRequestProvider) as Service }.tag(MyServices.mock)
...
let service: Service = container.resolve(MyServices.live)

线程安全

SwiftResolver 是线程安全的。这意味着您可以在不同的线程中注册/解析。

然而,这不是一个好做法,因为解析尚未注册的实例会导致 fatalError

建议使用 wiki 页面上描述的 AppContainer 进行一次性注册过程。

参考资料