1

私のデモ プロジェクトでは、View Controller の手動作成をアセンブリ内のファクトリ ベースの作成に置き換えました (Jasper Blues がここで示したように: https://stackoverflow.com/a/24227246/397898 ) 。

// ApplicationAssembly

dynamic func mainStoryboard() -> AnyObject {
    return TyphoonDefinition.withClass(TyphoonStoryboard.self) {
        (definition) in

        definition.useInitializer("storyboardWithName:factory:bundle:") {
            (initializer) in

            initializer.injectParameterWith("Main")
            initializer.injectParameterWith(self)
            initializer.injectParameterWith(NSBundle.mainBundle())
        }

        definition.scope = TyphoonScope.Singleton
    }
}

// PersonListAssembly

dynamic func personListViewController() -> AnyObject {

        return TyphoonDefinition.withFactory(self.applicationAssembly.mainStoryboard(), selector: "instantiateViewControllerWithIdentifier:", parameters: {
            (factoryMethod) in

            factoryMethod.injectParameterWith("PersonListViewController")
        })
    }

ただし、View Controller にはまだ他の依存関係が必要です。これを行うときにどのようにプロパティを注入できますか?

そして、実際には 2 つの質問があります。このようにビュー コントローラーを使用しようとすると、すべての IBOutlets が nil になります。何か不足していますか?

ジャスパーの回答に基づく正解

dynamic func personListViewController() -> AnyObject {

    return TyphoonDefinition.withClass(PersonListViewController.self) {
        (definition) in

        definition.factory = self.applicationAssembly.mainStoryboard()
        definition.useInitializer("instantiateViewControllerWithIdentifier:", parameters: { (factoryMethod) in

            factoryMethod.injectParameterWith("PersonListViewController")
        })

        definition.injectProperty("presenter", with: self.personListPresenter())
    }
}
4

1 に答える 1