Objective c 台风的影响范围

Objective c 台风的影响范围,objective-c,typhoon,Objective C,Typhoon,假设有几个王国。每个王国都有一座城堡。 现在我想为其中一个王国创造一些骑士 界面如下所示: @interface Castle : NSObject @end @interface Kingdom : NSObject @property(nonatomic, strong)Castle *castle; @end @interface Knight : NSObject @property(nonatomic, strong)Castle *address; @end 骑士的实际内部实现

假设有几个王国。每个王国都有一座城堡。 现在我想为其中一个王国创造一些骑士

界面如下所示:

@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]];
    }];
}
这显然是错误的。 我想表达的是“请为我的王国创造一个骑士,如果你需要一座城堡(或我王国中的其他东西),那么使用合适的一座。”

我可以用castle运行时参数来克服这个问题。但事实上,骑士需要这个城堡是一个实现细节。也许未来骑士的实现还需要其他东西

我可以通过以下代码实现我想要的行为:

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

[assembly knight];
MiddleAgesAssembly*assembly=[[MiddleAgesAssembly]激活];
id objectGraphSharedInstances=[assembly valueForKeyPath:@“factory.\u objectGraphSharedInstances”];
[objectGraphSharedInstances setObject:castle forKey:@selector(castle)];
[集会骑士];
这不是很优雅,但它解决了本例中的问题

一种更通用的方法是在工厂中注册一个自定义TyphoonComponentsPool,并为其定义相应的作用域

这方面有什么计划吗?或者有更好的方法来解决这类问题


谢谢,Felix

以下是如何使用Typhone当前的功能集进行此操作:

  • 定义范围为singleton、lazy singleton或弱singleton的holder对象。此持有者对象具有可在上下文对象中传递的可变属性或方法
  • 定义其他定义
  • 把这些注入你需要的任何东西

正如评论中所提到的,我们很乐意探索GitHub tracker中的其他功能/增强

以下是如何使用Typhone当前的功能集:

  • 定义范围为singleton、lazy singleton或弱singleton的holder对象。此持有者对象具有可在上下文对象中传递的可变属性或方法
  • 定义其他定义
  • 把这些注入你需要的任何东西
正如评论中所提到的,我们很乐意探索GitHub tracker中的其他功能/增强