Google Guiceのアレコレ ―ListをGuiceで管理する―

あるいは、Genericタイプの着いたクラスをコンテナで管理する方法。

Google Guiceをいろいろ試してていろいろ日本語情報で見つからないのがあったので、メモしておく。

登録

TypeLiteralを使ってあげる。

 List<IService> list = new ArrayList<IService>();
 list.add(new ServiceA());
 list.add(new ServiceB());
 binder.bind(new TypeLiteral<List<IService>>() {}).toInstance(list);

リストの中身は当然コンテナ管理にはならないざんす。

http://code.google.com/p/google-guice/wiki/FrequentlyAskedQuestions

取得

List<IService> list = injector.getInstance(Key.get(new TypeLiteral<List<IService>>(){}));

TypeLiteralを持ったKeyを使ってやればOK.