我试图将Typhoon Framework整合到我的应用中并遇到一个问题。
我有3个继承自TyphoonAssembly
的课程。其中一个取决于另一个。
以下是具有依赖性
的程序集的代码@interface SMObjectFactory : TyphoonAssembly
@property(nonatomic, strong, readonly) SMManagersAssembly *managersAssembly;
- (SMNote *)createEmptyNoteWithCurrentDate;
@end
// ===================================
@implementation SMObjectFactory {}
- (SMNote *)createEmptyNoteWithCurrentDate {
return [TyphoonDefinition withClass:[SMNote class] configuration:^(TyphoonDefinition *definition) {
[definition useInitializer:@selector(init)];
NSDate *dateAdded = [NSDate date];
[definition injectProperty:@selector(key) with:[NSString UUID1WithDate:dateAdded]];
[definition injectProperty:@selector(dateAdded) with:dateAdded];
[definition injectProperty:@selector(folderKey) with:self.managersAssembly.folderManager.defaultFolder];
}];
}
@end
调用self.managersAssembly.folderManager.defaultFolder
时出现问题。这里self.managersAssembly
是TyphoonCollaboratingAssemblyProxy
的一个实例,因此,self.managersAssembly.highlightManager
是TyphoonReferenceDefinition的实例,而不是应该由folderManager分别返回的实际程序集和对象。
Info.plist中定义的程序集如下
我试图改变这些物品的订购,没有运气。
如果没有self.managersAssembly.folderManager.defaultFolder
行,它会成功编译,例如,如果在app委托类(也是注入)中,我调用[(SMManagersAssembly *)self.assembly highlightManager] .defaultHighlight它运行得很好。
我做错了什么,以及做这件事的方式是什么?
台风2.2.1
答案 0 :(得分:1)
要执行您想要的操作,请参阅用户指南中的'Injecting Objects Produced by Other Components',其中概述了两种基本相同的方式。使用最适用的那个。
另请注意:
您创建一个或多个程序集。在后一种情况下,一个组件中的组件可以通过声明属性来引用另一个组件中的组件。例如:
@interface PFApplicationAssembly : TyphoonAssembly
@property(nonatomic, strong, readonly) PFCoreComponents *coreComponents;
@property(nonatomic, strong, readonly) PFThemeAssembly *themeProvider;
@end
Typhoon将使用满足上述要求的任何组件组合构建您的应用程序,例如{PFApplicationAssembly,TestCoreComponents,ColorfulThemes}
如果您希望覆盖定义(例如测试与生产),则只应覆盖程序集,否则组件可以如上所示相互引用。