Ject 1.2.2

Ject 1.2.2

测试已测试
语言语言 SwiftSwift
许可证 自定义
发布上次发布2017年10月
SwiftSwift 版本3.0.0
SPM支持 SPM

Josh 维护。



Ject 1.2.2

  • superuserdid

Ject




Swift

Ject 是一个简单、轻量级、快捷的 Swift 构建服务依赖注入解决方案。

考虑到快速集成和方便设置,它专为有创见的开发者设计,非常适合小型到中型项目。Ject 从 Dagger2 获得了灵感,旨在将简单性融入您项目中使用依赖注入的整个过程。

Ject 当前处于测试版。

要求

  • Swift 3
  • iOS 8.0+

入门指南

创建依赖图

您可以使用以下方式轻松创建一个新的 DependencyManager

let dependencyManager = DependencyManager()

或者您可以使用以下方式定义您自己的 DependencyGraph 实现:

let dependencyManager = DependencyManager(MyDependencyGraph())

建议您保留一个包含依赖项的图的引用。一个很好的解决方案是在结构体中创建一个属性,它是按需实例化的

import Ject

struct Dependencies {

    static var instance = Dependencies()

    lazy var manager = DependencyManager()

    private init(){
        //Default Constructor
    }
    
    ...
}

使类可注入

为了使用 Ject 依赖注入,您的依赖项必须继承自 Injectable。声明您的方法并使其实现 Injectable

class ViewUtils: Injectable {

    required init() {
        //Default Constructor
    }

    func inject(dependencyGraph: Graph) -> Injectable {
        return ViewUtils()
    }

    func isSingleton() -> Bool {
        return true
    }

}

将依赖注入到依赖中

许多时候,您的依赖项有它们自己的依赖项。使用 Ject,您可以使用两种方法来注入这些依赖项

  • 构造函数注入

在构造函数中将依赖项作为参数添加,就像您通常做的那样。理想情况下,这些依赖项也继承自 Injectable

class ViewUtils: Injectable {

    var mIconManager: IconManager?

    var mColorManager: ColorManager?

    init(iconManager: IconManager, colorManager: ColorManager) {
        mIconManager = iconManager
        mColorManager = colorManager
    }

    required init() {
        //Default Constructor
    }

    func inject(dependencyGraph: Graph) -> Injectable {
        //Use your constructor here to inject your Injectable Dependencies
        return ViewUtils(iconManager: dependencyGraph.inject(IconManager.self), colorManager: dependencyGraph.inject(ColorManager.self))
    }

    func isSingleton() -> Bool {
        return true
    }

}
  • 属性注入

您也可以按照以下方式直接将依赖注入到属性中

class ViewUtils: Injectable {

    var manager: DependencyManager {
        return Dependencies.instance.manager
    }

    var mIconManager: IconManager {
        return manager.inject(IconManager.self)
    }

    var mColorManager: ColorManager {
        return manager.inject(ColorManager.self)
    }

    required init() {
        //Default Constructor
    }

    func inject(dependencyGraph: Graph) -> Injectable {
        return ViewUtils()
    }

    func isSingleton() -> Bool {
        return true
    }

}

许可证

MIT 许可证。有关详细信息,请参阅 LICENSE 文件