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对象。此持有者对象具有可在上下文对象中传递的可变属性或方法
- 定义其他定义
- 把这些注入你需要的任何东西