Я использую Guice для DI, где я хочу внедрить несколько экземпляров одного и того же интерфейса в вызывающий класс.Иерархия классов выглядит следующим образом:
public interface MyInterface<T, U> {
public T getX(U u);
}
public abstract class MyAbstractClass<T, U> implements MyInterface<T, U> {
public void routineStuff() {
...
}
}
public class MyImplOne extends MyAbstractClass<T1, U1> {
public T1 getX(U1 u) {
return new T1(u);
}
}
public class MyImplTwo extends MyAbstractClass<T2, U2> {
public T2 getX(U2 u) {
return new T2(u);
}
}
public class MainClass {
@Inject
public MainClass(Provider<MyInterface> myInterface) {
}
public void DoX1() {
myInterface.get().getX().print(); // should inject MyImplOne
}
public void DoX2() {
myInterface.get().getX().print(); // should inject MyImplTwo
}
}
Возможно ли это с Guice?Нужно ли мне писать классы провайдеров, которые бы предоставили необходимые объекты для MyImplOne и MyImplTwo, а также какова должна быть конфигурация, как в этом случае?