注册表 (Registry)

一个基于简单容器的 Swift 依赖注入解决方案。

要求

安装

Swift 包管理器 (Swift Package Manager)

要将 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())

为了解析依赖项,建议使用属性包装器 @Injectedresolve(:) 默认实现。 要使用 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