Я использую ножки робота, у меня есть набор сервисов, которые расширяют базовый класс и зависят от Parser, IParser. Мне нужно подключить парсер, специфичный для подкласса. Вот пример:Роботы подключаются к зависимостям, которые относятся к базовому классу
ModuleConfigResponse расширяет SimpleServiceResponse и реализует IServiceResponse.
Начальная часть легко проволоки в контексте, вот пример:
injector.mapClass(IServiceResponse, ModuleConfigResponse);
injector.mapClass(IServiceResponse, SimpleServiceResponse, "roomconfig");
..etc
Каждый ответ использует анализатор, который используется в BaseClass:
injector.mapValue(IParser, ModuleConfigParser, "moduleconfig");
injector.mapValue(IParser, RoomConfigParser, "roomconfig");
Вопрос заключается в том, как связать их вместе. Базовый класс может иметь:
[Inject]
public var parser : IParser
Но я не могу определить тип раньше времени. Мне интересно, есть ли хороший способ подключения этого в контексте. На данный момент я решил связать это, создав ответы в ResponseFactory, вместо этого, чтобы я заплатил парсер вручную в конструкторе.
инжектор.mapValue (IParser, ModuleConfigParser, "moduleconfig");
Mmh Я пришел к выводу с другим разработчиком, который назвал инъекции не так уж плохо в зависимости от обстоятельств, где это ясно видно в контексте или на заводе. Я думаю, что интерфейсы маркеров так же плохи. Ваш первый пример будет в порядке, однако в некоторых ответах могут использоваться разные парсеры - повторное использование. Пока я буду придерживаться фабрики, которая также инкапсулирует имена строк. :). – serenskye
Да, они определенно не идеальны, но у них есть преимущество проверки типа CT. Но TBH я никогда не сталкивался с ситуацией, описанной выше, вероятно, из-за другого стиля кодирования/дизайна, поэтому я просто дал ответ, чтобы решить вопрос как есть. – Creynders