DGDependencyInjector 2.0.1

DGDependencyInjector 2.0.1

测试已测试
Lang语言 SwiftSwift
许可 BSD
发布最后发行2017年7月
SwiftSwift 版本3.0
SPM支持 SPM

Benoit BRIATTE 维护。



  • Digipolitan

DGDependencyInjector

依赖注入 Swift。兼容 swift server-side 和 Swift for iOS

基础知识

首先,您必须创建一个模块并注册一些提供商

let module = Module()
module.bind(IAnimal.self).to(Dog.self)

IAnimal 是一个协议,Dog 类必须实现它

public protocol IAnimal {

    var name: String { get }

    func scream() -> String
}

open class Dog: IAnimal, Injectable {

    public var name: String

    public required convenience init(injector: Injector, arguments: [String : Any]?) throws {
        self.init(name: arguments?["name"] as? String ?? "Athina")
    }

    init(name: String) {
        self.name = name
    }

    public func scream() -> String {
        return "Barking"
    }
}

然后,您必须在注入器中注册您的模块

Injector.default.register(module: module)

最后,注入一个 IAnimal 并检索模块内注册的具体类

if let animal = try? Injector.default.inject(IAnimal.self) {
  print(animal.name) // print Athina
  print(animal.scream()) // print Barking
}

高级

参数

注册一个处理参数的提供商

let module = Module()
module.bind(IAnimal.self).with { (_, arguments) -> IAnimal? in
  if let name = arguments?["name"] as? String {
    return Dog(name: name)
  }
  return nil
}
Injector.default.register(module: module)

注入具有 arguments Dictionary<String, Any> 的 IAnimal

if let animal = Injector.default.inject(IAnimal.self, arguments: ["name": "Athina"]) {
  print(animal.name) // print Athina
  print(animal.scream()) // print Barking
}
if let otherAnimal = Injector.default.inject(IAnimal.self, arguments: ["name": "Yoda"]) {
  print(otherAnimal.name) // print Yoda
  print(otherAnimal.scream()) // print Barking
}

贡献

有关更多信息,请参阅 CONTRIBUTING.md

本项目遵循 贡献者行为准则。通过参与,您期望遵守此准则。如有不适当行为,请向 [email protected] 报告。

许可

DGDependencyInjector 使用 BSD 3-Clause 许可证授权。