2015-12-08 1 views
1

Предположим, что существует несколько королевств. В каждом королевстве есть замок. Теперь я хочу создать некоторых рыцарей для одного из этих королевств.Расширение существующих объектовграфики с тайфуном

интерфейсов выглядеть следующим образом:

@interface Castle : NSObject 
@end 

@interface Kingdom : NSObject 
@property(nonatomic, strong)Castle *castle; 
@end 

@interface Knight : NSObject 
@property(nonatomic, strong)Castle *address; 
@end 

Фактическая внутренняя реализация рыцарей требуют ссылок на замок. Вот мое определение:

-(Knight *)knight 
{ 
    [TyphoonDefinition withClass:[Knight class] configuration:^(TyphoonDefinition *definition) { 
     [definition injectProperty:@selector(address) with:[self castle]]; 
    }]; 
} 

Это очевидно неправильно. Что я хочу выразить: «Пожалуйста, создайте рыцаря для своего королевства, и если вам нужен замок (или что-то еще в моем королевстве), используйте справа».

Я мог бы преодолеть эту проблему с помощью аргумента run-runtime. Но тот факт, что рыцарь нуждается в этом замке, является детальностью реализации. Возможно, будущие реализации рыцарей нуждаются в чем-то другом.

я могу добиться поведения я хочу с помощью следующего кода:

MiddleAgesAssembly* assembly = [[MiddleAgesAssembly assembly] activate]; 
id<TyphoonComponentsPool> objectGraphSharedInstances = [assembly valueForKeyPath:@"factory._objectGraphSharedInstances"]; 
    [objectGraphSharedInstances setObject:castle forKey:@selector(castle)]; 

[assembly knight]; 

Это не очень элегантно, но это решает проблему в этом примере.

Более общий подход заключается в регистрации пользовательского TyphoonComponentsPool на заводе с соответствующими областями для определений.

Есть ли планы в этом направлении? Или, может быть, есть лучший способ решить такие проблемы?

Спасибо, Феликс

ответ

0

Вот как сделать это с помощью текущего набора функций Typhoon в:

  • Определения объекта держателя с областью одноточечной, ленивыми одноточечной или слабыми одноточечной. Этот объект-держатель имеет изменяемые свойства или методы для передачи в контекстных объектах.
  • Определите другие определения, которые use the holder object as a factory.
  • Внесите их в то, что вам нужно.

Как уже упоминалось в комментариях, мы с удовольствием рассмотрим альтернативные функции/улучшения в трекер GitHub.

 Смежные вопросы

  • Нет связанных вопросов^_^