DependencyInjector 2.2.1

DependencyInjector 2.2.1

Benoit BRIATTE 维护。



  • Digipolitan

DependencyInjector

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

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

安装

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 包管理器

Swift包管理器(Swift Package Manager)是一个用于自动化Swift代码分发的工具,并与swift编译器集成。

一旦设置好Swift包,将DependencyInjector添加为依赖项只需将其添加到Package.swift中的dependencies值即可。

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

基础

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

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

IBeast是协议,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的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

本项目遵守贡献者行为守则(Code of Conduct)。您需要遵守此行为守则。如有不适当的行为,请向以下邮箱地址报告:[email protected]

许可证

DependencyInjector遵循BSD 3-Clause许可证