我已经检查了由程序集实现协议并将程序集作为属性注入视图控制器的想法,该控制器需要实现该协议的内容。这在此解释:https://github.com/appsquickly/Typhoon/wiki/backed-by-a-factory-protocol(带有FriendListViewController示例)。
但是,如果不使用故事板,我应该如何实例化FriendListViewController以便Typhoon注入程序集?
在其他示例中,我看到您必须执行以下操作:
FriendListViewController *flvc = [[[MyAppAssembly new] activate] friendListController];
这是正确的方法吗?如果这是正确的,那么任何时候我需要一个依赖,我总是可以使用
[[[MyAppAssembly new] activate] aDependencyX]
为什么要打扰组装呢?
感谢。
答案 0 :(得分:1)
如上所示重新实例化Typhoon的新实例是不正确的。
实例化台风有两种方法。
您可以使用任何一种方式(如果您正在使用故事板,则建议使用前者),但每个应用程序或程序集集只应执行一次。
在您实例化Typhoon之后,您可以通过injecting the assembly从一个对象图到另一个对象图,进入将要从Typhoon实例化新对象的对象。台风sample application for Objective-C或Swift显示了大量的例子。
在遗留应用程序中,您逐渐引入Typhoon,您可能希望从一个本身不是从Typhoon实例化的类中实例化来自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正在运行。从那里你应该将Typhoon组件注入需要它的类中。没有故事板,请从AppDelegate或根视图控制器开始。
通过注入TyphoonAssembly本身,我们可以使用加载特定用例的对象图 - 例如注入了所有依赖项的顶级视图控制器。当该用例完成时,可以丢弃整个对象图。