1

在我的演示项目中,我将视图控制器的手动创建替换为在程序集中基于工厂的创建(如 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")
        })
    }

但是视图控制器仍然需要一些其他的依赖。这样做时如何注入属性?

实际上我有两个问题:当我尝试像这样使用视图控制器时,所有 IBOutlets 都是 nil。我错过了什么吗?

根据 Jasper 的回答正确回答

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

1

似乎声明从另一个 Typhoon 组件发出的组件的快捷方式不支持此(尚)。我们将打开一个问题。同时你可以回退到 Typhoon 1.0 风格的 API:

- (id)currentTheme
{
    return [TyphoonDefinition withClass:[PFTheme class] 
        configuration:^(TyphoonDefinition* definition)
    {
        definition.factory = [self themeFactory];
        [definition useInitializer:@selector(sequentialTheme)];
    }];
}

. . 当您使用这种方法时:

  • 初始化器(带或不带 args)实际上是生成组件的对象上的实例方法。
  • 可以设置其他属性、范围等。

我们创建了一个简短的方法,因为它有点令人困惑,因为它实际上是创建组件的类上的一个实例方法。似乎在添加配置块时存在疏忽。

于 2014-10-31T08:39:12.310 回答