警告:该项目尚未被认为功能完整。
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 运行时诡计。