工厂初始化与产生额外的属性注入(Factory initialization with addito

2019-10-21 04:55发布

在我的演示项目中,我取代了手工创建与工厂为基础创建一个视图控制器的组件中,像这样(如碧玉蓝调证明这里: 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是零,当我尝试使用这样的视图控制器。 我缺少的东西吗?

基于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())
    }
}

Answer 1:

这似乎宣布从另一个台风组件发出的组件不支持这个(还)的快捷方式。 我们将打开一个问题 。 同时,你可以回落到台风1.0风格的API:

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

。 。 当您使用此方法:

  • 一个初始化(有或没有参数)实际上是将产生该组件的对象上的实例方法。
  • 附加属性,范围等可以被设置。

我们创建了一小段路作为其有点混乱指的“初始化”这实际上是在类创建组件实例方法。 它看起来像有在加配置块的监督。



文章来源: Factory initialization with additonal property injection
标签: swift typhoon