首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Robotlegs连接属于基类的依赖项

Robotlegs连接属于基类的依赖项
EN

Stack Overflow用户
提问于 2012-03-02 20:16:51
回答 2查看 200关注 0票数 0

我使用机器人腿,我有一堆扩展基类的ServiceResponses,并且依赖于解析器IParser。我需要连接一个特定于该子类的解析器。下面是一个例子:

ModuleConfigResponse扩展了SimpleServiceResponse并实现了IServiceResponse。

最初的部分在上下文中很容易连接,下面是一个示例:

代码语言:javascript
复制
injector.mapClass(IServiceResponse, ModuleConfigResponse);
injector.mapClass(IServiceResponse, SimpleServiceResponse, "roomconfig");
..etc

每个响应使用一个由基类使用的解析器:

代码语言:javascript
复制
injector.mapValue(IParser, ModuleConfigParser, "moduleconfig");
injector.mapValue(IParser, RoomConfigParser, "roomconfig");

问题是如何将这些联系在一起。基类可以具有:

代码语言:javascript
复制
[Inject]
public var parser : IParser

但是我不能提前定义类型。我想知道有没有一种很好的方法来连接上下文。目前,我决定在ResponseFactory中实例化响应,这样我就可以在构造函数中手动传递解析器。

injector.mapValue(IParser,ModuleConfigParser,"moduleconfig");

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-05-24 22:28:03

我意识到,不是所有的东西都可以在上下文中映射,RL让我陷入了这种思维方式。但我已经意识到,映射一个工厂来生成这些具有非常特定依赖关系的对象要好得多,而不是使用标记接口或字符串来编写更少的代码库:)

票数 1
EN

Stack Overflow用户

发布于 2012-03-02 20:33:43

一种解决方案是在基类中包含以下内容:

代码语言:javascript
复制
protected var _parser : IParser

然后,例如在ModuleConfigResponse中

代码语言:javascript
复制
[Inject(name='moduleconfig')]
public function set parser( value : IParser ) : void{
    _parser = value;
}

但是,强烈建议您使用命名注入,您最好使用标记接口:

代码语言:javascript
复制
public interface IModuleConfigParser extends IParser{}

基类保持不变,但ModuleConfigResponse随后将使用:

代码语言:javascript
复制
[Inject]
public function set parser( value : IModuleConfigParser ) : void{
    _parser = value;
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9533130

复制
相关文章

相似问题

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