DependencyInjector
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
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许可证。