Я пытаюсь настроить DI для многомодульного рабочего пространства с помощью Swinject.У меня есть один 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()]
в AppDelegate ParentProject (на данный момент).Кажется, что все работает нормально, метод assemble(container:)
имеет один и тот же контейнер для всех сборок, некоторые инъекции работают, но другие имеют эту ошибку, предлагая, чтобы я зарегистрировал службу без указания objectScope вообще?Это невозможно
Справка