NerdzInject 1.1.3

NerdzInject 1.1.3

NerdzLab 维护。



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 文件。