我需要在不同位置注入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/

10-15 04:10