Actionscript 3 机器人腿连接属于基类的依赖项

Actionscript 3 机器人腿连接属于基类的依赖项,actionscript-3,robotlegs,Actionscript 3,Robotlegs,我使用的是机器人腿,我有一堆ServiceResponse,它们扩展了一个基类,并且依赖于解析器IParser。我需要连接一个特定于该子类的解析器。下面是一个例子: ModuleConfigResponse扩展了SimpleServiceResponse并实现了IServiceResponse 初始部分在上下文中很容易连接,下面是一个示例: injector.mapClass(IServiceResponse, ModuleConfigResponse); injector.mapClass(I

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

ModuleConfigResponse扩展了SimpleServiceResponse并实现了IServiceResponse

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

injector.mapClass(IServiceResponse, ModuleConfigResponse);
injector.mapClass(IServiceResponse, SimpleServiceResponse, "roomconfig");
..etc
每个响应都使用基类使用的解析器:

injector.mapValue(IParser, ModuleConfigParser, "moduleconfig");
injector.mapValue(IParser, RoomConfigParser, "roomconfig");
问题是如何将这些联系在一起。基类可以有:

[Inject]
public var parser : IParser
但是我不能提前定义类型。我想知道是否有一个很好的方式连接在上下文中。目前,我决定通过在ResponseFactory中实例化响应来实现这一点,以便在构造函数中手动传递解析器


injector.mapValue(IParser、ModuleConfigParser、“moduleconfig”)

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

protected var _parser : IParser
例如,在ModuleConfigResponse中

[Inject(name='moduleconfig')]
public function set parser( value : IParser ) : void{
    _parser = value;
}
但TBH强烈反对使用命名注入,您也可以使用标记接口:

public interface IModuleConfigParser extends IParser{}
基类保持不变,但ModuleConfigResponse随后将使用:

[Inject]
public function set parser( value : IModuleConfigParser ) : void{
    _parser = value;
}

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

Mmh我与另一位开发人员得出结论,根据具体情况,命名注入并不是那么糟糕,在上下文或工厂中清晰可见的位置。我认为标记接口同样糟糕。您的第一个示例是可以的,但是一些响应可以使用不同的解析器-可重用性。现在,我将坚持使用一个工厂,它也封装了字符串名称。:)。是的,它们绝对不理想,但它们确实有CT检查的好处。但是我从未遇到过你上面描述的情况,可能是因为不同的编码/设计风格,所以我只是给出了一个答案来解决这个问题。