InjectKit

一个概念验证,用于使用 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/

https://blog.vihan.org/swift-function-builders/