当对象范围为容器时,多次调用 Swinject 工厂关闭

Posted

技术标签:

【中文标题】当对象范围为容器时,多次调用 Swinject 工厂关闭【英文标题】:Swinject factory closure called multiple times when object scope is container 【发布时间】:2020-07-12 11:48:14 【问题描述】:

我正在尝试将 CoreDataStack 注册为对象范围 .container 的共享容器上的单个实例,但是它的工厂关闭被多次调用,并且当我在 Xcode 中调试内存图时,即使在返回的对象不是值类型!

Swinject 文档:

如果工厂闭包返回值类型,则忽略对象范围,因为它的实例根据 Swift 规范从不共享。

这种奇怪行为的根本原因是什么?

【问题讨论】:

【参考方案1】:

使用名称注册服务可以解决问题并且不再创建实例

container.register(CoreDataStack.self, name: "CoreDataStack") 
        DefaultCoreDataStack(modelName: "name")
 .inObjectScope(.container)

【讨论】:

以上是关于当对象范围为容器时,多次调用 Swinject 工厂关闭的主要内容,如果未能解决你的问题,请参考以下文章

Swinject:生成任何对象的实例(对于未注册的对象、ViewModel 等...)

Bean标签范围配置

在 swinject 环境下卡住情节提要控制

每次使用 Swinject 解析对象时如何返回相同的实例?

Swinject 容器注册失败

我在 Swinject 中做错了啥?