我正在尝试使用 Swinject 为多模块工作区设置 DI。我有一个ParentProject
嵌入二进制框架的地方ChildProject
(因此ParentProject
包括来自 的所有公共代码ChildProject
)。
我的方法是为每个模块创建一个程序集,然后在 ParentProject 中将它们组合在一起。我得到的错误对我来说真的很奇怪,取一个NSPersistentContainer
:
Swinject: Resolution failed. Expected registration:
{ Service: NSPersistentContainer, Factory: Resolver -> NSPersistentContainer }
Available registrations:
{ Service: NSPersistentContainer, Factory: Resolver -> NSPersistentContainer, ObjectScope: container }
ParentProject 的装配示例:
public class ParentProjectAssembly: Assembly {
...
public func assemble(container: Container) {
...
container.register(NSPersistentContainer.self) { _ in
return self.persistentContainer
}.inObjectScope(.container)
...
}
}
如果我将这个注册码移到或者我在他们两个中都有这个注册并不重要ChildProjectAssembly
,错误总是一样的。我的汇编器只是Assembler([ParentProjectAssembly(), ChildProjectAssembly()]
在 ParentProject 的 AppDelegate 中(现在)。似乎一切正常,assemble(container:)
方法对所有程序集都有相同的容器,一些注入确实有效,但其他人有这个错误提示我应该在不指定 objectScope 的情况下注册服务?那是不可能的。
帮助