我有一个提供者:
@SuppressWarnings({ "rawtypes", "unchecked" })
@Provides
@Singleton
@OutboundBroker
public EventBroker outboundBrokerProvider()
在运行时,我想得到这个。
EventBroker outbound=injector.getInstance(Key.get(EventBroker.class, Names.named("OutboundBroker")));
但是,此代码不起作用 - 提供程序未命名,但我无法弄清楚如何使用注释@OutboundBroker检索它
答案 0 :(得分:3)
Key.get(EventBroker.class, OutboundBroker.class)
答案 1 :(得分:0)
极少需要从Injector
获取多个对象。如果使用纯依赖注入,则main()
方法(或容器)会创建注入器并获取一个对象,并调用该对象上的一个或多个方法。这一个对象将被注入所需的内容。
所以你可以这样做:
class EventService {
private final EventBroker outboundEventBroker;
@Inject
private EventService(
@OutboundBroker EventBroker outboundBroker) {
this.outboundEventBroker = outboundBroker;
}
...
}
正如Jeff Bowman所说,这假定OutboundBroker
本身已注明@BindingAnnotation
。