我有mainAssembly
:
final class ApplicationAssembly {
var assembler: Assembler
init(with assemblies: [Assembly]) {
self.assembler = Assembler(assemblies)
}
}
以两个模块为例:
var applicationAssembly = ApplicationAssembly(with: [ProfileAssembly(), StoriesAssembly()])
window?.rootViewController = applicationAssembly.assembler.resolver.resolve(ProfileViewController.self)
这里是ProfileAssembly
:
import Swinject
class ProfileAssembly: Assembly {
func assemble(container: Container) {
container.register(ProfileInteractorInput.self) { (r, presenter: ProfilePresenter) in
let interactor = ProfileInteractor()
interactor.output = presenter
return interactor
}
container.register(ProfilePresenterInput.self){ (r, viewController: ProfileViewController) in
let presenter = ProfilePresenter()
presenter.output = viewController
presenter.interactor = r.resolve(ProfileInteractorInput.self, argument: presenter)
presenter.router = r.resolve(ProfileRouterInput.self, argument: viewController)
return presenter
}
container.register(ProfileRouterInput.self) { (r, viewController: ProfileViewController) in
let router = ProfileRouter()
router.viewController = viewController
return router
}
container.register(ProfileViewController.self) { r in
let viewController = ProfileViewController()
viewController.presenter = r.resolve(ProfilePresenterInput.self, argument: viewController)
return viewController
}
}
}
一切正常,但我不知道如何配置我的路由器导航到另一个模块:
protocol ProfileRouterInput: class {
func openStories()
}
class ProfileRouter: ProfileRouterInput {
weak var viewController: UIViewController?
func openStories() {
}
}
在 Swinject 之前,我使用过线框图,其中我有类似build()
函数的东西来返回特定的 VC。但是由于我的程序集位于主汇编程序容器中,我是否应该从我的应用程序中的任何路由器直接访问主汇编程序?