Java Guice:根据谁获得不同的实现注入不同的实现?

Java Guice:根据谁获得不同的实现注入不同的实现?,java,guice,Java,Guice,我有两个第三方类,这两个类都采用了Authorizer接口的实现。我需要为每个应用注入不同的实现 如果我执行一个@提供的,我如何实现它,以便它在运行时提供所需的实现?提供者不知道是谁要求注射 理论上,我可以使用@命名,但我不能修改正在注入的代码。我想做一些类似的事情: bind(Authorizer.class).to(ImplA.class).for(SomeClass.class) bind(Authorizer.class).to(ImplB.class).for(SomeOtherCla

我有两个第三方类,这两个类都采用了
Authorizer
接口的实现。我需要为每个应用注入不同的实现

如果我执行一个
@提供的
,我如何实现它,以便它在运行时提供所需的实现?提供者不知道是谁要求注射

理论上,我可以使用
@命名
,但我不能修改正在注入的代码。我想做一些类似的事情:

bind(Authorizer.class).to(ImplA.class).for(SomeClass.class)
bind(Authorizer.class).to(ImplB.class).for(SomeOtherClass.class)

显然,“for”代码不存在,但是有没有等效的方法可以做到这一点?

您可以使用它来实现这一点,它允许您安装(相互不可访问)冲突绑定,以用于构建有限的非冲突公开绑定集。这通常被视为的解决方案,在这种解决方案中,您希望(例如)公开
@左腿
@右腿
,其中
对象是完全相同的,但在层次结构中绑定了不同的
实现(
左脚
右脚

在这一点上,您并没有指定“谁得到它”,而是为一个消费者与另一个消费者展示了一个稍微不同的喷油器图形

install(new PrivateModule() {
  bind(Authorizer.class).to(ImplA.class);
  expose(SomeClass.class);
});
install(new PrivateModule() {
  bind(Authorizer.class).to(ImplB.class);
  expose(SomeOtherClass.class);
});

你有没有看过
@Named
和其他绑定注释是你应该处理这个问题的方式。不幸的是,这两种解决方案都需要对注入的代码进行注释,正如我提到的,我不能这样做(它们来自第三方JAR)。