台风 - 由工厂协议支持

Typhoon - Backed by a factory protocol

我已经检查了让程序集实现协议并将程序集作为 属性 注入到需要实现该协议的视图控制器的想法。这在这里解释:https://github.com/appsquickly/Typhoon/wiki/backed-by-a-factory-protocol(以 FriendListViewController 为例)。

但是,如果不使用故事板,我应该如何实例化 FriendListViewController 以便 Typhoon 注入程序集?

在其他示例中,我看到您必须执行以下操作: FriendListViewController *flvc = [[[MyAppAssembly new] activate] friendListController];

这是正确的方法吗?如果这是正确的,那么任何时候我需要一个我总是可以使用的依赖项 [[[MyAppAssembly new] activate] aDependencyX] 为什么要注入程序集?

谢谢。

如上所示重新实例化 Typhoon 的新实例是不正确的。

有两种方法可以实例化Typhoon。

您可以使用任何一种方式(如果您使用故事板,建议使用前者),但是您应该只对每个应用程序或程序集执行一次

实例化 Typhoon 后,您可以从一个对象图继续到另一个对象图,injecting the assembly into the object that will be instantiating a new object from Typhoon. The Typhoon sample application for Objective-C or Swift 显示了很多这样的例子。

在逐渐引入 Typhoon 的遗留应用程序中,您可能希望从本身未从 Typhoon 实例化的 class 实例化 Typhoon 实例。在这种情况下,您可以在 AppDelegate 中放置以下内容:

[self.assembly makeDefault];

以及程序集中 AppDelegate 的定义:

- (AppDelegate *)appDelegate
{
    return [TyphoonDefinition withClass:[PFAppDelegate class] 
      configuration:^(TyphoonDefinition *definition)
    {
          [definition injectProperty:@selector(assembly) with:self];
    };   

}];

}

然后在其他地方获取:

MyAssembly* assembly = [MyAssembly defaultAssembly];

Plist 集成

Plist 集成是实例化 Typhoon 的一种方式。我们在您的 AppInfo.plist 文件中添加了一些行,等等 - 台风 运行。从那里你应该将 Typhoon 程序集注入到需要它的 classes 中。没有故事板,从 AppDelegate 或根视图控制器开始。

通过注入 TyphoonAssembly 本身,我们可以为特定用例加载对象图 - 例如,注入所有依赖项的顶级视图控制器。当该用例完成时,可以丢弃整个对象图。