Java Guice-绑定由辅助注入工厂创建的实例

Java Guice-绑定由辅助注入工厂创建的实例,java,dependency-injection,guice,guice-3,assisted-inject,Java,Dependency Injection,Guice,Guice 3,Assisted Inject,假设有一个类A,它的构造函数是这样的: public A(@Assited long id, @Assisten String name, ServiceA serviceA, ServiceB serviceB) injector = Guice.createInjector(new MyModule()); AFactory af = injector.getInstance(AFactory .class); A a = AFactory.create(100, "mike"); 还有

假设有一个类A,它的构造函数是这样的:

public A(@Assited long id, @Assisten String name, ServiceA serviceA, ServiceB serviceB)
injector = Guice.createInjector(new MyModule());
AFactory af = injector.getInstance(AFactory .class);
A a = AFactory.create(100, "mike");
还有一家工厂:

public interface AFactory{

    A create(long id, String name);
}
因此,要创建A的实例,我显然需要执行以下操作:

public A(@Assited long id, @Assisten String name, ServiceA serviceA, ServiceB serviceB)
injector = Guice.createInjector(new MyModule());
AFactory af = injector.getInstance(AFactory .class);
A a = AFactory.create(100, "mike");
但是,, 假设我还有其他类:类B、类C和类D,它们有一个类型为a的成员,例如(具有字段注入,但也可以是ctor):

我希望A的相同实例将被注入到这些类中。 但是仍然可以选择将A的另一个实例注入到其他类(比如类E和F)

正确的做法是什么?
我想不出一个干净的方法来做到这一点。

您可以构建模块以使用提供程序(我使用下面的方法,但如果您愿意,您可以使用完整的提供程序类或实例),并将一致性标记为。如果您想要一个的两个绑定(一致和不一致),至少其中一个应该用绑定注释标记;为了方便起见,我在这里使用了
@Named
,但是您可以使用列出的任何绑定注释


因此,如果我在类E中有一个字段,如下所示:@Inject@Named(“consistent”)
@Inject@Named(“consistent”)一个fieldName
,但是是的。关键的“一致性”可以是任何东西,只要你对此保持一致