是否有强烈反对使我的TyphoonAssembly成为单身人士的案例?如果是这样,为什么?如果没有,是否有建议的方法?

时间:2015-06-16 08:37:53

标签: ios objective-c dependency-injection typhoon

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

所以我的问题是:

  1. 是否有强烈反对让TyphoonAssembly成为单身人士?
  2. 有没有办法在框架内这样做,或者我应该按照惯常的方式去做?
  3. 编辑:我刚刚开始,但我们说我有一个(现在)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)];
                }];
    }
    

    没有什么值得一提的,但重点是我的新应用程序中至少有三到四个这个程序集的客户端仍在#34; Hello World&#34;功能水平。

    接下来,如果我需要使用汇编参数编写初始值设定项,我会这样做,但是如果我能够让我的ApplicationAssembly成为一个单例(或者在一个对象的范围内) )然后我会。

1 个答案:

答案 0 :(得分:1)

如果你让你的装配成为单身,我认为什么都不会破坏,但它永远不应该是必要的。您的程序集包含用于实例化对象的配方或蓝图,并且在启动时,在幕后,所有这些信息都会进入TyphoonComponentFactory。此时,程序集本身基本完成了它们的工作,当被问及时,它现在负责TyphoonComponentFactory构建或发出一个范围缓存的实例。 。 。

。 。在启动之后,我们继续使用汇编接口,这样我们就不必诉诸'魔术字符串',但这只会导致Objective-C消息转发到TyphoonComponentFactory的componentForKey方法。

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

使用plist integration

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

<强> Manually

例如:

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

在这种情况下,您可以根据需要保留TyphoonComponentFactory,如果是应用程序,通常会在应用程序的整个生命周期内保留5*2=10。现在我建议将其保留在应用代表上,虽然一旦你感到舒服,你会发现它可以通过proceeding from one object graph to another隐式保留。

所以,对于任何一种引导Typhoon的方法来说,组装单身是没有优势的。 (实际上对于plist集成样式,这将被忽略)。

相关问题