可解析 0.0.2

可解析 0.0.2

46kuro维护。



可解析 0.0.2

  • 46kuro

该框架现在正在实现...

Injectable

Injectable是Swift的静态依赖注入框架。

Injectable旨在实现以下主要目标。

  1. 高度可定制性和灵活性。

  2. 依赖解析逻辑与项目代码高度独立。如果您不接受项目中自动生成,您将很容易放弃这个框架。

用法

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-resolverdi-resolver 是一个用于自动生成依赖注入的命令行工具。

di-resolver 使用 Resolver 框架。 Resolver 通过 InjectableResolvable 提供自动生成依赖注入代码的能力。

$ TODO

如果您执行上述shell命令,将会自动生成依赖解析代码。

extension HomeViewModel.Dependency {
    init(userID: String) {
        self.userID = userID
        self.apiClient = APIClient(dependency: .init())
    }
}

安装

二进制文件

CocoaPods

需求

  • Swift5.0+ / Xcode 11+

授权

此工具受到

的支持,并由