SwiftInjector 0.5.1

SwiftInjector 0.5.1

测试已测试
语言语言 SwiftSwift
许可 MIT
发布日期最后发布2016年1月
SPM支持 SPM

Sash Zats 维护。



Injector

警告:该项目尚未被认为功能完整。

之前

let applicationController = ApplicationController(
    persistanceService: persistanceService,
    analyticsService: analyticsService,
    remoteConfigurationService: remoteConfigurationService,
    authenticationController: authenticationController,
    networkProvider: provider
)

之后

let applicationController = try injector.inject(ApplicationController.init)

请查看项目附带的所有示例,了解更多信息。

但等等,还有更多

简单注入

let chicken = 🐔()
injector.set(chicken)

// later in your code
let chicken: 🐔 = injector.get()
chicken.cockadoodle()

显式类型指定

protocol 🍌💕 {
    func peel()
}

struct 🐵: 🍌💕 {
}

struct 🐨: 🍌💕 {
}

injector.set(🐵())
injector.set(🐨())

let banana: 🍌💕 = injector.get(type: 🐨.self)!
banana.peel()

自动注入

Injector 可以使用之前注册的实例来注入指定函数的所有参数

struct 🦁 {
    let heart: ❤️
    let innerKitten: 😺
    init(heart: ❤️, innerKitten: 😺) {
        self.heart = heart
        self.innerKitten = innerKitten
    }
}

injector.set(❤️())
injector.set(😺())

let lion = try injector.inject(🦁.init)
lion.meow()

如果任意参数未与 injector 注册,它将抛出 InjectorError.TypeNotFound(T),其中第一个类型是 injector 失败寻找的类型。您不仅限于构造器,可以利用任何方法(最多 30 个参数)

当前限制

  • 如果您的类有多个构造器,inject 可能会困惑。作为一个可能的解决方案,您可以定义一个不带任何内容的便利类函数
  • 当前 get 方法的复杂度是 O(n)。欢迎为此改进的 PR。唯一的限制是不使用 Objective-C 运行时诡计。

感谢

安装