は、あなたのモジュールで@Provides
方法を使用することができます。必要に応じて
class MyModule extends AbstractModule() {
@Override
protected void configure() {
// ...
}
@Provides
@Inject
public List<Foo> foos(OneFoo one, TwoFoo two) {
return Arrays.asList(one, two);
}
}
あなたはfoos
の引数リストを拡張することができます。似ていますが、より詳細なアプローチは、プロバイダを使用するために、次のようになります場合は
protected void configure() {
bind(new TypeLiteral<List<Foo>>() {})
.toProvider(FooListProvider.class);
}
static class FooListProvider implements Provider<List<Foo>> {
@Inject
Provider<OneFoo> one;
@Inject
Provider<TwoFoo> two;
public List<Foo> get() {
return Arrays.asList(one.get(), two.get());
}
}
あなたはOneFooとTwoFooが注入されているシングルトンリストをしたい、あなたは@Singleton
注釈を追加することができます。一方で、あなたはOneFooとTwoFooが注入されていないため、シングルトンリストが必要な場合は
@Singleton
@Provides
@Inject
public List<Foo> foos(OneFoo one, TwoFoo two) {
return Collections.unmodifiableList(Arrays.asList(one, two));
}
、あなたが使用することができTypeLiteralを:私はその時点で不変のリストを作るにも推薦する
@Override
protected void configure() {
bind(new TypeLiteral<List<Foo>>() {})
.toInstance(Arrays.asList(new OneFoo(), new TwoFoo()));
}
この場合も、リストを変更不可能にすることを提案します。
あなたは[multibindings](https://code.google.com/p/google-guice/wiki/Multibindings)を使いたいと思うようです。 –
multibindingsは当初、関係するすべてのクラスが私たちのコントロール下にあるので、過剰な気分になりました。しかし、私はそれがどのように感じるか見るためにそれをチェックアウトします。 –