1

我开始使用Typhoon并发现继续编写带有附加assembly参数的构造函数很烦人。所以我很想把我TyphoonAssembly变成一个单身人士。但是我还没有在任何示例中看到这样做,并且我确实看到了使用构造函数或属性注入来提供程序集的示例。所以也许有一个反对它的案例——它看起来确实有点糟糕,但有多糟糕,我不知道。

所以我的问题是:

  1. 是否有强烈的理由反对让我TyphoonAssembly成为单身人士?
  2. 有没有办法在框架内这样做,还是我应该按照通常的方式来做?

编辑:我才刚刚开始,但假设我有一个(现在)ApplicationAssembly使用如下:

- (NavigationController *)customDefaultNavigationController {
    return [TyphoonDefinition withClass:[NavigationController class]
            configuration:^(TyphoonDefinition *definition) {
                [definition useInitializer:@selector(init)];
            }];
}

- (id<IRootWireframe>)rootWireframe {
    return [TyphoonDefinition withClass:[RootWireframe class]
            configuration:^(TyphoonDefinition *definition) {
                [definition useInitializer:@selector(init)];
            }];
}

甚至没有什么值得一提的,但关键是我的新应用程序中至少有三四个这个程序集的客户端,它仍然处于“Hello World”功能级别。

展望未来,如果我需要编写带有程序集参数的初始化程序,我会这样做,但如果我可以只制作ApplicationAssembly一个单例(或限定在一个对象中),那么我会的。

4

1 回答 1

1

如果您将程序集设为单例,我认为不会有任何问题,但它永远不是必需的。您的程序集包含实例化对象的配方或蓝图,并且在启动时,在幕后,所有这些信息都进入TyphoonComponentFactory. 在这一点上,程序集本身基本上已经完成了它们的工作,现在 TyphoonComponentFactory 有责任在被询问时构建或发出一个范围缓存的实例。. .

. . 启动后,我们继续使用汇编接口,这样我们就不必求助于“魔术字符串”,但这只会导致Objective-C消息转发到TyphoonComponentFactory的componentForKey方法。

您可以通过以下两种方式之一引导 Typhoon(或库等):

使用plist 集成

这意味着您将在整个应用程序中拥有一个 TyphoonComponentFactory 实例。

手动

例如:

MiddleAgesAssembly *mainAssembly = [[MiddleAgesAssembly new] 
    activateWithCollaboratingAssemblies:@[
      [QuestsAssembly new]
    ]];

在这种情况下,您可以TyphoonComponentFactory根据需要保留多久,对于应用程序,它通常会贯穿应用程序的整个生命周期。现在我建议将它保留在应用程序委托中,尽管一旦你感到舒服,你会发现它可以通过从一个对象图继续到另一个对象图来隐式保留。

因此,对于引导 Typhoon 的任何一种方法,作为单例的程序集都没有任何优势。(事实上​​,对于 plist 集成样式,这将被简单地忽略)。

于 2015-06-16T09:38:14.773 回答