一个概念验证,用于使用 Swift 5.1 的函数构建器 DSL 和 PropertyWrappers 构建依赖注入框架。
//Init Dependency Tree
start {
single(DogType.self) { _ in Dog() }
factory(Cat.self) { _ in Cat() }
factory(Cat.self) { _ in Cat() }
factory(String.self) { _ in "123" }
single(Database.self) { _ in Database.database() }
single(Human.self) { Human(dog: $0.resolve(DogType.self)) }
}
// Using by Inject annotation
class Main {
@Inject private var value: String
@Inject private var myDog: DogType
@Inject private var myDog2: DogType
@Inject private var database: Database
@Inject private var human: Human
init() {
print(value)
print(myDog.name)
myDog.run()
print(myDog.name)
print(myDog2.name)
print(human.name)
}
}
let _ = Main()
特别感谢
https://quickbirdstudios.com/blog/swift-dependency-injection-service-locators/