该框架现在正在实现...
Injectable
Injectable是Swift的静态依赖注入框架。
Injectable旨在实现以下主要目标。
-
高度可定制性和灵活性。
-
依赖解析逻辑与项目代码高度独立。如果您不接受项目中自动生成,您将很容易放弃这个框架。
用法
Injectable 协议
Injectable
协议提供依赖注入树。
public protocol Injectable {
associatedtype Dependency
}
public protocol InitInjectable: Injectable {
init(dependency: Dependency)
}
public protocol FactoryInjectable: Injectable {
static func make(dependency: Dependency) -> Self
}
您可以实现Injectable
协议以提供依赖注入。
final class HomeViewModel: HomeViewModelProtocol, InitInjectable {
struct Dependency {
let userID: String
let apiClient: APIClientProtocol
}
private let dependency: Dependency
init(dependency: Dependency) {
self.dependency = dependency
}
}
Resolvable
Resolvable
协议允许解析依赖注入树。
public protocol Resolvable {
associatedtype Impls
static var impls: Impls! { get }
}
您需要实现Resolvable
协议以解析依赖注入树。
extension HomeViewModel: Resolvable {
static var impls: (APIClient)!
}
di-resolver
如果您要自动生成解析代码,可以使用 di-resolver
。di-resolver
是一个用于自动生成依赖注入的命令行工具。
di-resolver
使用 Resolver
框架。 Resolver
通过 Injectable
和 Resolvable
提供自动生成依赖注入代码的能力。
$ TODO
如果您执行上述shell命令,将会自动生成依赖解析代码。
extension HomeViewModel.Dependency {
init(userID: String) {
self.userID = userID
self.apiClient = APIClient(dependency: .init())
}
}
安装
二进制文件
CocoaPods
需求
- Swift5.0+ / Xcode 11+
授权
此工具受到
的支持,并由