문제

I'm using robot legs, I've got a bunch of ServiceResponses that extends a base class and have a dependency on a Parser, IParser. I need to wire in a parser specific to the subclass. Here's an example:

ModuleConfigResponse extends SimpleServiceResponse and implements IServiceResponse.

The initial part is easy to wire in the context, here's an example:

injector.mapClass(IServiceResponse, ModuleConfigResponse);
injector.mapClass(IServiceResponse, SimpleServiceResponse, "roomconfig");
..etc

Each Response uses a parser that is used by the baseclass:

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

The question is how to tie these together. The base class could have:

[Inject]
public var parser : IParser

But I can't define the type ahead of time. Im wondering if there a nice way of wiring this in the context. For the moment I've decided to wire this up by instanciating responses in a ResponseFactory instead so that I pay pass the parser manually in the constructor.

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

도움이 되었습니까?

해결책

I realised that not everything can be mapped in the context, RL trapped me into this way of thinking. But I've realised that its far better to map a factory to produce these objects which have very specific dependencies, than littler the codebase with marker interfaces or strings :)

다른 팁

one solution is to have the following in your base class:

protected var _parser : IParser

Then for instance in ModuleConfigResponse

[Inject(name='moduleconfig')]
public function set parser( value : IParser ) : void{
    _parser = value;
}

But TBH, using named injections is STRONGLY discouraged, you might as well use a marker interface:

public interface IModuleConfigParser extends IParser{}

the base class stays the same, but ModuleConfigResponse would then use:

[Inject]
public function set parser( value : IModuleConfigParser ) : void{
    _parser = value;
}
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top