带汇编的共享容器 - 如何将相同的对象传递给Coordinator和Controller

时间:2018-02-10 11:39:45

标签: swift dependency-injection swinject

每次我们解析协议/类时,我们都会获得一个新对象。我的协调员需要一个视图模型,我的控制器需要相同的视图模型。

internal class LoginFactory: Assembly {
func assemble(container: Container) {
    let delegate = UIApplication.shared.delegate as? AppDelegate
    container.register(LSViewModel.self) { res in
        return LSViewModel()
    }
    container.register(LSCoordinator.self, factory: { res in
        let cord = LSCoordinator(window: (delegate?.window)!)
        cord.viewModel = res.resolve(LSViewModel.self)
        return cord
    })
    container.register(LSViewController.self) { res in
        let cont = StoryboardScene.Login.lsViewController.instantiate()
        cont.viewModel = res.resolve(LSCoordinator.self)?.viewModel
        return cont
    }
}

}

协调员就像

internal final class LSCoordinator: BaseCoordinator<Void>, Coordinator, HasDisposeBag {

private let window: UIWindow
weak var navigationController: UINavigationController!
//LSViewModel implements LSViewModelType
var viewModel: LSViewModelType!
init(window: UIWindow) {
    self.window = window
}

func start() -> Observable<Void> {
    let lslViewController: LSViewController = DependencyManager.getResolver().resolve(LSViewController.self)!
    navigationController = UINavigationController(rootViewController: lsController)

    viewModel.outputs.doneTapped
        .subscribe(onNext: { [weak self] in self?.showLoginTypes() }).disposed(by: disposeBag)
    window.rootViewController = navigationController
    window.makeKeyAndVisible()
    return .never()
}

func showLoginTypes() {
    print(“blah blah”)
}

}

问题是,当我尝试在lsViewController中注入viewModel时,会创建一个不同的lsViewModel实例。因此,Rx绑定不起作用,并且不执行print语句。有没有办法将相同的视图模型传递给协调器和控制器?

0 个答案:

没有答案