Typhoon模块依赖关系解析为TyphoonCollaboratingAssemblyProxy

时间:2014-10-07 13:55:48

标签: objective-c dependency-injection typhoon

我试图将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.managersAssemblyTyphoonCollaboratingAssemblyProxy的一个实例,因此,self.managersAssembly.highlightManager是TyphoonReferenceDefinition的实例,而不是应该由folderManager分别返回的实际程序集和对象。

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

Assemblies defined in Info.plist as following

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

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

我做错了什么,以及做这件事的方式是什么?

台风2.2.1

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}

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