依赖注入器 (DependencyInjector)

Swift Version Build Status CocoaPods Compatible Carthage Compatible Swift Package Manager Compatible Platform Twitter

Swift 依赖注入器。 兼容 Swift 服务器端和 iOS Swift。

安装

CocoaPods

要使用 CocoaPods 安装 DependencyInjector,请将以下行添加到您的 Podfile

source 'https://github.com/CocoaPods/Specs.git'
platform :ios, '9.0'
use_frameworks!

pod 'DependencyInjector'

Carthage

Carthage 是一个去中心化的依赖管理器,它可以构建您的依赖项并为您提供二进制框架。

您可以使用 Homebrew 通过以下命令安装 Carthage

$ brew update
$ brew install carthage

要使用 Carthage 将 DependencyInjector 集成到您的 Xcode 项目中,请在您的 Cartfile 中指定它

github 'Digipolitan/dependency-injector' ~> 2.0

运行 carthage update 以构建框架,并将构建的 DependencyInjector.framework 拖到您的 Xcode 项目中。

Swift Package Manager

Swift Package Manager 是一种用于自动化 Swift 代码分发的工具,它已集成到 swift 编译器中。

一旦您设置了 Swift 包,将 DependencyInjector 添加为依赖项就像将其添加到 Package.swiftdependencies 值一样简单。

dependencies: [
    .package(url: "https://github.com/Digipolitan/dependency-injector.git", from: "2.0.0")
]

基础

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

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)

使用参数 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

该项目遵守 贡献者公约行为准则。 通过参与,您需要遵守此准则。 请向 contact@digipolitan.com 报告不可接受的行为。

许可证

DependencyInjector 在 BSD 3-Clause 许可证下获得许可。