Guiceでジェネリック型を注入しようとしています。 CursorクラスにあるRepository <T>があります。
public class Cursor<T> {
@Inject
protected Repository<T> repository;
したがって、Cursor <User>を作成するときに、Guiceがリポジトリ<User>にリポジトリを挿入することも必要です。これを行う方法はありますか?
TypeLiteral
を使用する必要があります:
import com.google.inject.AbstractModule;
import com.google.inject.TypeLiteral;
public class MyModule extends AbstractModule {
@Override
protected void configure() {
bind(new TypeLiteral<Repository<User>>() {}).to(UserRepository.class);
}
}
Cursor<T>
のインスタンスを取得するには、Injector
が必要です。
import com.google.inject.Guice;
import com.google.inject.Injector;
import com.google.inject.Key;
import com.google.inject.TypeLiteral;
public class Main {
public static void main(String[] args) {
Injector injector = Guice.createInjector(new MyModule());
Cursor<User> instance =
injector.getInstance(Key.get(new TypeLiteral<Cursor<User>>() {}));
System.err.println(instance.repository);
}
}
詳細 FAQ 。