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 进行一次性注册过程。