一个基于简单容器的 Swift 依赖注入解决方案。
要将 Registry
添加到您的项目中,请从 Xcode 菜单中选择
File (文件) > Swift Packages (Swift 包) > Add Package Dependency... (添加包依赖...)
输入 Registry 仓库的 URL: https://github.com/effzehn/Registry.git
。
当提示时,输入一个特定的版本或一个版本范围。
或者,如果您的项目有一个 Package.swift
文件 (例如,因为它是一个 Swift 包),您可以直接将 Registry 添加到您的依赖项中
.package(url: "https://github.com/effzehn/Registry.git", .upToNextMajor(from: "1.0.2"))
建议从 DependencyContainer
开始。 如果需要,可以实现另一个具有您自己的内部逻辑的 DependencyContainerProtocol
。
为了将依赖项添加到容器中,请使用 register(:::)
默认实现
DependencyContainer.standard.register(TestClass())
为了解析依赖项,建议使用属性包装器 @Injected
或 resolve(:)
默认实现。 要使用 resolve
方法解析依赖项
do {
let foo: Bar = try DependencyContainer.standard.resolve()
} catch let error {
print(error)
}
请记住,解析失败是致命错误。 这使您能够在开发阶段尽早发现依赖注入中的关键缺陷。 将来可能会有另一种故障处理选项,在这种选项中,必须在调用点定义解析错误处理。
使用 @Injected
属性包装器是最方便的方法。
@Injected private var foo: Bar
除非指定了另一个容器,否则属性包装器将使用 DependencyContainer.standard
。
如果您想将依赖项作为 environmentObject 注入,您可以使用 inject(:::)
视图修饰符。 它的工作方式与 .environmentObject
相同,但额外的好处是依赖项解析是隐式发生的。
AChildView()
.inject(Bar.self)
除非指定了另一个容器,否则修饰符将使用 DependencyContainer.standard
。
请参阅内联文档以获取其他选项和更多信息。
我们感谢您的贡献,但是请尽量保持此组件的实用性及其用法的简单性。 欢迎您创建更改的拉取请求,我们很乐意对其进行审核。
此项目已获得 MIT 许可。 有关更多信息,请参见 LICENSE。