/ / Инжектиране на клас <T> с помощта на guice-java, инжектиране на зависимост, guice

Инжектиране на клас <T> с помощта на guice - java, зависимост от инжекция, guice

Аз работя за прилагане на DI, специално инжектор на конструктор, използващ guice. Имам трудности да разбера как мога да инжектирам типа на класа за генеричен в конструктора.

Моят клас е както следва:

public class Foo<T> {

private Class<T> clazz;

Foo(Class<T> clazz) {
this.clazz = clazz;
}
}

Мога ли да използвам guice, за да инжектирам типа на класа в конструктора по време на изпълнение? Просто казано, мога ли да използвам guice, за да инжектирам в конструктора на Foo?

Отговори:

1 за отговор № 1

Да, можете да го направите с помощта на Guice вградено впръскване на TypeLiteralс.

public class Main {
public static void main(String[] args) {
Injector injector = Guice.createInjector();

Test<Integer> testInt = injector.getInstance(Key.get(new TypeLiteral<Test<Integer>>() {}));
testInt.action();

Test<String> testString = injector.getInstance(Key.get(new TypeLiteral<Test<String>>() {}));
testString.action();
}

public static class Test<T> {
private final Class<? super T> clazz;

@Inject
public Test(TypeLiteral<T> literal) {
this.clazz = literal.getRawType();
}

public void action() {
System.out.println(clazz);
}
}
}

Не съм сигурен защо getRawType() се завръща Class<? super T>, не Class<T>, макар че.


0 за отговор № 2

употреба

bind(new TypeLiteral<Class<SomeClass>>() {}).toInstance(SomeClass.class);

да конфигурирате Guice за инжектиране SomeCLass.class в конструктора на

Foo<SomeClass>