В моем демо-проекте я заменил ручное создание контроллера представления с созданием фабрики на базе в сборке, как так (как Jasper Blues продемонстрировал здесь: https://stackoverflow.com/a/24227246/397898)инициализация фабрики с введением Additonal собственности
// 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")
})
}
Но контроллер просмотра все еще нуждается в некоторых других зависимостях. Как я могу придать правильное значение при выполнении этого?
И на самом деле у меня есть два вопроса: все IBOutlets равны нулю, когда я пытаюсь использовать контроллер вида, как это. Я что-то упускаю?
Правильный ответ, основанный на ответ Джаспера
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())
}
}
Отлично, спасибо. Я обновлю свой текст вопроса, чтобы предоставить правильный код, который я использую сейчас. –