1

我正在尝试将 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 中定义的程序集如下

Info.plist 中定义的程序集如下

我试图改变这些物品的顺序,没有运气。

如果没有该self.managersAssembly.folderManager.defaultFolder行,它会成功编译,例如,如果在应用程序委托类(也被注入)中我调用 [(SMManagersAssembly *)self.assembly highlightManager].defaultHighlight 它工作得很好。

我做错了什么,正确的做法是什么?

台风 2.2.1

4

1 回答 1

1

要执行您想要的操作,请参阅用户指南中的“注入由其他组件生成的对象”,其中概述了两种执行基本相同操作的方式。使用最适用的一种。

另请注意:

您创建一个或多个装配体。在后一种情况下,一个组件中的组件可以通过声明属性来引用另一个组件中的组件。例如:

@interface PFApplicationAssembly : TyphoonAssembly

@property(nonatomic, strong, readonly) PFCoreComponents *coreComponents;
@property(nonatomic, strong, readonly) PFThemeAssembly *themeProvider;

@end

Typhoon 将使用满足上述要求的任何程序集组合构建您的应用程序,例如 {PFApplicationAssembly, TestCoreComponents, ColorfulThemes}

如果您希望覆盖定义(例如测试与生产),则应仅覆盖程序集,否则组件只能如上所示相互引用。

于 2014-10-07T14:25:50.363 回答