【发布时间】:2020-03-31 20:57:11
【问题描述】:
我正在使用带有 Play 框架的 Java 8。我的目标是注入一个映射,其键是枚举值,值是特定接口的实现。
这是我的枚举:
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,这样我就可以使用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 中。我错过了什么?
【问题讨论】:
-
你在哪里
@Inject Processor? -
...如果您不是注入处理器而是通过调用
new Processor()创建它,那是您的问题。
标签: java dependency-injection playframework guice