NeedleFoundation 0.17.2

NeedleFoundation 0.17.2

UberRudro Samanta 维护。



  • 作者:
  • 王毅

Build Status Carthage compatible License

Needle 是一个适用于 Swift 的依赖注入(DI)系统。与例如 CleanseSwinject 这样的其他 DI 框架不同,Needle 鼓励 层次化的 DI 结构,并利用代码生成来确保编译时安全。这使得我们能够自信地开发应用程序和进行代码更改。如果编译通过,那就是有效的。从这个角度看,Needle 更接近于 JVM 的 Dagger

Needle 旨在实现以下主要目标

  1. 通过确保依赖项注入代码的编译时安全性来提供高可靠性。
  2. 即使与多达数百万行的代码库一起使用,也确保代码生成性能高速。
  3. 与所有 iOS 应用程序架构兼容,包括 RIBs、MVx 等。

概要

使用 Needle 编写应用程序的 DI 代码既简单又安全。每个依赖项范围由一个 Component 定义,其依赖项封装在 Swift protocol 中。这两个使用 Swift 泛型链接在一起。

/// This protocol encapsulates the dependencies acquired from ancestor scopes.
protocol MyDependency: Dependency {
    /// These are objects obtained from ancestor scopes, not newly introduced at this scope.
    var chocolate: Food { get }
    var milk: Food { get }
}

/// This class defines a new dependency scope that can acquire dependencies from ancestor scopes
/// via its dependency protocol, provide new objects on the DI graph by declaring properties,
/// and instantiate child scopes.
class MyComponent: Component<MyDependency> {

    /// A new object, hotChocolate, is added to the dependency graph. Child scope(s) can then
    /// acquire this via their dependency protocol(s).
    var hotChocolate: Drink {
        return HotChocolate(dependency.chocolate, dependency.milk)
    }

    /// A child scope is always instantiated by its parent(s) scope(s).
    var myChildComponent: MyChildComponent {
        return MyChildComponent(parent: self)
    }
}

基本上就是这样,使用 Needle 编写 DI 代码。如您所见,一切都是真实的、可编译的 Swift 代码。没有脆弱的注释或“注释”。为了快速回顾,这里的三个关键概念是依赖协议、组件和子组件实例化。请参阅下面的使用 Needle 入门部分以了解更多详细说明和高级主题。

使用 Needle 入门

使用和集成 Needle 有两个步骤。以下每个步骤都有详细的说明和解释,请参阅链接文档。

  1. 将 Needle 的代码生成器与您的 Swift 项目集成.
  2. 根据 NeedleFoundation 的 API 编写应用程序 DI 代码.

安装

Needle由两部分组成,即NeedleFoundation框架和可执行代码生成器。为了使用Needle作为依赖注入系统,这两部分都需要与您的Swift项目进行集成。

安装NeedleFoundation框架

使用Carthage

请遵循Carthage安装流程的规范,将NeedleFoundation框架集成到您的Swift项目中。

github "https://github.com/uber/needle.git" ~> VERSION_OF_NEEDLE

使用Swift Package Manager

请使用标准Swift Package Manager包定义过程,将Needle指定为依赖项,以便将NeedleFoundation框架集成到您的Swift项目中。

dependencies: [
    .package(url: "https://github.com/uber/needle.git", .upToNextMajor(from: "VERSION_NUMBER")),
],
targets: [
    .target(
        name: "YOUR_MODULE",
        dependencies: [
            "NeedleFoundation",
        ]),
],

使用CocoaPods

请遵循标准的pod集成流程,并使用NeedleFoundation pod。

安装代码生成器

使用 Carthage

如果使用 Carthage 集成 NeedleFoundation 框架,那么相应版本的代码生成器可执行文件已被下载到 Carthage 文件夹中。它位于 Carthage/Checkouts/needle/Generator/bin/needle

使用 Homebrew

无论如何将 NeedleFoundation 框架集成到项目中,都可以通过 Homebrew 安装生成器。

brew install needle

为什么使用依赖注入?

该链接文档使用一个较为真实的示例来解释什么是依赖注入模式以及其优点。

相关项目

如果你喜欢 Needle,请查看我们团队的其他相关的开源项目

许可

FOSSA Status