首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >与台风有关的现有物体图

与台风有关的现有物体图
EN

Stack Overflow用户
提问于 2015-12-08 22:31:02
回答 1查看 46关注 0票数 1

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

接口如下所示:

代码语言:javascript
复制
@interface Castle : NSObject
@end

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

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

骑士的实际内部执行需要参考城堡。以下是我的定义:

代码语言:javascript
复制
-(Knight *)knight
{
    [TyphoonDefinition withClass:[Knight class] configuration:^(TyphoonDefinition *definition) {
        [definition injectProperty:@selector(address) with:[self castle]];
    }];
}

这显然是错误的。我想表达的是“请为我的王国创造一个骑士,如果你需要一座城堡(或我王国中的其他东西),那么就使用right one”。

我可以用城堡运行时争论来解决这个问题。但事实上,骑士需要这座城堡,这是一个实施细节。也许未来的骑士实现还需要别的东西。

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

代码语言:javascript
复制
MiddleAgesAssembly* assembly = [[MiddleAgesAssembly assembly] activate];
id<TyphoonComponentsPool> objectGraphSharedInstances = [assembly valueForKeyPath:@"factory._objectGraphSharedInstances"];
    [objectGraphSharedInstances setObject:castle forKey:@selector(castle)];

[assembly knight];

这不是很优雅,但它解决了本例中的问题。

一种更普遍的方法是在工厂中注册一个定制的TyphoonComponentsPool,其中包含相应的定义范围。

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

谢谢,费利克斯

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-12-11 00:36:49

下面是如何使用Typhoon的当前功能集来完成这一任务:

  • 定义具有作用域单例、惰性单例或弱单例的holder对象。此holder对象具有要传递上下文对象的可变属性或方法。
  • 定义将holder对象用作工厂的其他定义。
  • 把这些注射到你需要的任何东西里。

正如注释中提到的,我们很乐意探索GitHub跟踪器中的其他特性/增强功能。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34167321

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档