Зависимости модуля Typhoon разрешены для TyphoonCollaboratingAssemblyProxy.

Я пытаюсь интегрировать 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


person Vladimir Prudnikov    schedule 07.10.2014    source источник


Ответы (1)


Чтобы сделать то, что вы хотите, обратитесь к «Внедрение объектов, созданных другими компонентами» в Руководстве пользователя, в котором описываются два стиля выполнения практически одного и того же. Используйте тот, который наиболее применим.

Также обратите внимание, что:

Вы создаете одну или несколько сборок. В последнем случае компоненты в одной сборке могут ссылаться на компоненты в другой, объявив свойство. Например:

@interface PFApplicationAssembly : TyphoonAssembly

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

@end

Typhoon создаст ваше приложение с любой комбинацией сборок, которые соответствуют вышеизложенному, например {PFApplicationAssembly, TestCoreComponents, ColorfulThemes}

Вы должны переопределять сборку только в том случае, если вы хотите переопределить определение (например, тест против производства), в противном случае компоненты могут просто ссылаться друг на друга, как показано выше.

person Jasper Blues    schedule 07.10.2014