Ject 是一个简单、轻量级、快捷的 Swift 构建服务依赖注入解决方案。
考虑到快速集成和方便设置,它专为有创见的开发者设计,非常适合小型到中型项目。Ject 从 Dagger2 获得了灵感,旨在将简单性融入您项目中使用依赖注入的整个过程。
Ject 当前处于测试版。
您可以使用以下方式轻松创建一个新的 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 文件。