1

我有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。但是由于我的程序集位于主汇编程序容器中,我是否应该从我的应用程序中的任何路由器直接访问主汇编程序?

4

0 回答 0