NerdzInject
NerdzInject 库允许您轻松地在 Swift 项目中使用依赖注入模式。
文档
示例
您需要注册您的实例或闭包在 NerdzInject
类中。
注册实例
NerdzInject.shared.registerObject(_ object: myInstance)
指定类类型注册实例
当您想注册一些派生类实例以供将来解析基类使用时,应该使用该方法
NerdzInject.shared.registerObject(_ object: inheritedClassInstance, for: BaseClass.self)
指定标识符注册实例
当您想注册某些实例以便他人通过标识符解析时,应使用此方法。
NerdzInject.shared.registerObject(_ object: myInstance, for: "my_custom_identifier")
闭包注册
您还可以注册返回值的闭包。这将允许您实现工厂或延迟初始化。使用 singleton
参数定义是否需要是工厂或延迟初始化。默认值为 false
。
NerdzInject.shared.register {
MyClassCreatedInFacvtory()
}
NerdzInject.shared.register(for: MyClass.self) {
MyClassCreatedInFacvtory()
}
NerdzInject.shared.register(singleton: true, for: "custom_identifier") {
MyClassCreatedInFacvtory()
}
解析实例
您可以通过类似注册的方式解析实例:通过标识符、指定类、通过实例类型。
let resolvedByInstanceType: MyType? = NerdzInject.shared.resolve()
let resolvedByProvidedType: NyBaseType? = NerdzInject.shared.resolve(by: MyType.self)
let resolvedByIdentifier: MyType? = NerdzInject.shared.resolve(by: "identifier")
}
或以类似方式通过属性包装器 Inject
解析。
@Inject var resolvedByInstanceType: MyType?
@Inject(MyType.self) var resolvedByProvidedType: MyBaseType?
@Inject("identifier") var resolvedByIdentifier: MyType?
ForceInject
您可以使用属性包装器 ForceInject
来避免解析时出现可选类型。从前面的示例中,我们会得到
@ForceInject var resolvedByInstanceType: MyType
@ForceInject(MyType.self) var resolvedByProvidedType: MyBaseType
@ForceInject("identifier") var resolvedByIdentifier: MyType
移除实例
您还可以使用 remove
方法移除注册的实例。
let success = NerdzInject.shared.remove(by: identifier)
NerdzInject.shared.remove(by: MyClass.self)
安装 Swift 包管理器
要将 NerdzInject 添加到基于 Swift 包管理器 的项目中,请添加以下内容:
.package(url: "https://github.com/nerdzlab/NerdzInject")
许可
本代码遵循 MIT 许可证发布。更多信息请参阅 LICENSE
文件。