Typhoon 是一种依赖注入容器,这意味着它不会影响、混合或以其他方式影响您的课程。因此,要获取注入了依赖项的类的实例,我们得问台风。
为什么不用于故事板?
使用 plist 集成时,Typhoon 注册 TyphoonStoryboard 代替 UIStoryboard,以根据 Storyboard 中的定义发出实例 - 就像普通 Storyboard 一样工作,并具有注入依赖项的额外好处。
在其他地方,为了获取注入了依赖项的实例,我们使用程序集接口,并询问 Typhoon。
解决步骤:
在程序集中添加 ViewControllerB 的定义。 (在 Objective-C 中,如果您愿意,您还可以使用自动注入宏)。
- (ViewControllerB *)viewControllerB
{
return [TyphoonDefinition withClass:[ViewControllerB class]
configuration:^(TyphoonDefinition *definition) {
[definition useInitializer:@selector(initWithNibName:bundle:)
parameters:^(TyphoonMethod *initializer) {
[initializer injectParameterWith:@"ViewControllerB"];
[initializer injectParameterWith:[NSBundle mainBundle]];
}];
[definition injectProperty:@selector(assembly) with:self];
}];
}
向 ViewController 添加一个属性:
//Start with this, next task is to back this with a protocol
@property(nonatomic, strong) AppAssembly *assembly;
现在更改实例化 ViewControllerC 的按钮操作:
ViewControllerC *viewControllerC = self.assembly.viewControllerC
[self.navigationController pushViewController:viewControllerC animated:YES];
现在我的应用程序类取决于我的 Typhoon Assembly,如果我不想要这个怎么办?
所有 Typhoon 程序集都可以由协议支持,以便您的应用程序只能看到实例的提供者,而不是 Typhoon。如果您希望从 Typhoon 迁移,只需提供该协议的替代实现 - 您仍然拥有一个强大的架构。