0
import Swinject

class GenericsAssembly: Assembly {
    func assemble(container: Container) {
        container.register(TabBarController.self) { resolver in
            let split1 = resolver.resolve(SplitViewController.self)!
            let split2 = resolver.resolve(SplitViewController.self)!
            split1.tabBarItem = UITabBarItem(title: "1", image: UIImage(named: "icon-notepad"), selectedImage: nil)
            split2.tabBarItem = UITabBarItem(title: "2", image: UIImage(named: "icon-chat"), selectedImage: nil)
            let controller = TabBarController(view: resolver.resolve(TabBarView.self)!)
            controller.viewControllers = [
                tasksSplitViewController,
                threadsSplitViewController
            ]
            return controller
        }
        container.register(SplitViewController.self) { _ in
            return SplitViewController()
        }
        container.register(TabBarView.self) { _ in
            return TabBarView()
        }
    }
}

そして... 一番下に TabBarItem が 1 つだけあります。なんで?

このように使用すると:

let split1 = SplitViewController()
let split2 = SplitViewController()

;) 私の実装では、Swinject の何が問題になっていますか?

4

3 に答える 3

0

「name」と「inObjectScope」の両方を追加したところ、うまくいきました。私の作業サンプルの下を確認してください

 var container = Container()

 container.register(ApiClientProtocol.self, name : "ApiClientInstance") { r in ApiClient()}.inObjectScope(.container)

 container.register(LoginViewModelProtocol.self) { r in LoginViewModel(fetcher: r.resolve(ApiClientProtocol.self, name: "ApiClientInstance")!)
  }

LoginViewModel クラスの上には、ApiClient クラスのシングルトン オブジェクトがあります。

于 2019-11-28T10:07:52.957 に答える