Я использую Java 8 с платформой Play. Моя цель состоит в том, чтобы внедрить карту, ключами которой являются перечисляемые значения, а значения являются реализациями определенного c интерфейса.
Вот мое перечисление:
public enum Service {
HTML("html"), TEXT("txt");
private String serviceId;
Service(String serviceId) { this.serviceId = serviceId; }
}
У меня есть Executable
интерфейс
public interface Executable { void execute(); }
и два класса, которые его реализуют:
public class HtmlWorker implements Executable { ... }
public class TextWorker implements Executable { ... }
Я хотел бы иметь возможность внедрить Map<Service, Executable> serviceMap
, чтобы иметь доступ к конкретной реализации c с помощью ключа Service
:
public class Processor {
@Inject
Map<Service, Executable> serviceMap;
public void doStuff() {
Executable htmlService = this.serviceMap.get(Service.HTML);
Executable textService = this.serviceMap.get(Service.TEXT);
// do more stuff
}
}
Я добавил привязки к классу модуля:
public class AppModule extends AbstractModule {
@Override
protected void configure() {
MapBinder<Service, Executable> serviceBinder = MapBinder
.newMapBinder(binder(), Service.class, Executable.class);
serviceBinder.addBinding(Service.HtmlService).to(HtmlWorker.class);
serviceBinder.addBinding(Service.TextService).to(TextWorker.class);
}
Проблема в том, что serviceMap
никогда не вводится и всегда null
внутри Processor
. Чего мне не хватает?