我需要在不同位置注入X
的多个实例。
我实现了一个自定义的Guice Provider,以提供以下X类的不同实例。
public class XProvider implements Provider<X> {
private final Factory f;
private final String NAME = "Something String";
@Inject
public XProvider(Factory f) {
this.f = f;
}
public X get() {
return new X(f, NAME);
}
}
因为我需要X的不同实例,且
NAME
的值不同,所以我需要具有多个相似的类例如XProvider1,XProvider2等,它们仅在一个字段中有所不同。
创建一个要从其扩展的抽象类无助于减少冗余代码的数量,因为(1)隐藏字段不好
(2)如果我不隐藏字段,无论如何我仍然需要在子类中有构造函数。
我不能使用辅助注入,因为我不拥有
X
,因此我更改了它的构造函数。必须有一个更好的方法,或者使用Guice的更聪明的方法,或者使用另一种方法来重组我的代码。
我正在这里寻找一些更改建议。
谢谢,
最佳答案
如果您预定义了一组有限的可能参数,则可以在guice模块中使用名为@Provides的绑定:
@Provides @Named("Type 1") MyClass getType1() {return new MyClass("Param of type 1");}
@Provides @Named("Type 2") MyClass getType2() {return new MyClass("Param of type 2");}
然后注入名称
@Inject @Named("Type 1")
private MyClass instance, anotherInstance;
ps。您可以将任何可注入的参数传递给@Provides方法,即getType2(Factory factory){return ...
关于java - 带参数的DRY自定义Guice提供程序,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42106774/