我使用机器人腿,我有一堆扩展基类的ServiceResponses,并且依赖于解析器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");
发布于 2012-05-24 22:28:03
我意识到,不是所有的东西都可以在上下文中映射,RL让我陷入了这种思维方式。但我已经意识到,映射一个工厂来生成这些具有非常特定依赖关系的对象要好得多,而不是使用标记接口或字符串来编写更少的代码库:)
发布于 2012-03-02 20:33:43
一种解决方案是在基类中包含以下内容:
protected var _parser : IParser然后,例如在ModuleConfigResponse中
[Inject(name='moduleconfig')]
public function set parser( value : IParser ) : void{
_parser = value;
}但是,强烈建议您使用命名注入,您最好使用标记接口:
public interface IModuleConfigParser extends IParser{}基类保持不变,但ModuleConfigResponse随后将使用:
[Inject]
public function set parser( value : IModuleConfigParser ) : void{
_parser = value;
}https://stackoverflow.com/questions/9533130
复制相似问题