是否有充分的理由反对让我的 TyphoonAssembly 成为单身人士?如果是这样,为什么?如果没有,是否有推荐的方法?

Is there a strong case against making my TyphoonAssembly a singleton? If so, why? If not, is there a recommended way to do so?

我开始使用 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 成为单例(或范围在一个对象中) ) 那我会的。

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

。 .启动后,我们继续使用程序集接口,这样我们就不必诉诸 'magic strings',但这只会导致 Objective-C 消息转发到 TyphoonComponentFactory 的 componentForKey 方法。

您可以通过以下两种方式之一 bootstrap 台风(或图书馆等):

使用plist integration

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

Manually

例如:

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

在这种情况下,您可以根据需要保留 TyphoonComponentFactory,对于应用程序,通常会贯穿应用程序的整个生命周期。现在我建议将它保留在应用程序委托上,尽管一旦您感到舒服,您就会发现它可以通过 proceeding from one object graph to another 隐式保留。

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