私はメソッドを公開するサービスを持っています。私は同じサービスの他の実装の結果を集めることができるそのメソッドの実装を持っています。インジェクションを介して他のインプリメンテーションのリストをその集約インプリメンテーションに注入するにはどうすればよいですか?例えば、注入されたインスタンスのリストを注入する
私は形質をDictionaryProvider
とし、get(s: String)
メソッドを提供します。私のMultipleDictionaryProvider
の実装では、他の実装、たとえばOxfordDictionaryAndColorProvider
とWebsterDictionaryAndShapeProvider
を集約できます。
class OxfordDictionaryAndColorProvider (p: Param) extends DictionaryProvider with ColorProvider
class WebsterDictionaryAndShapeProvider extends DictionaryProvider with ShapeProvider
class MultipleDictionaryProvider(
l: List[ DictionaryProvider ]
)
{
def get(){ /*Sequence of l matters*/ }
}
extends DictionaryProvider
両方OxfordDictionaryAndColorProvider
とWebsterDictionaryAndShapeProvider
注射によって構成されています。それらはどちらも辞書を提供する以外の役割を持ち、とにかく構成されたシングルトンインスタンスをそれぞれColorProvider
とShapeProvider
として持っています。
DictionaryProvider
をMultipleDictionaryProvider
にバインドしたいと思います。私が望むように内部の要素のシーケンスができるように、どうすればいいですか? (この特定のケースではOxfordDictionaryAndColorProvider
に続き、この特定のケースではWebsterDictionaryAndShapeProvider
)(変更は簡単で、変更は1か所で行う必要があります)
EDIT:私は質問を編集してより明確にしました。
Iドン:
dictList
は、実行時に決定することができることを注、それもこのバインディングを使用して注入することができますパラメータの型がハードコーディングされているのが好きです。彼らは10のいずれかになる可能性があり、私は手動で複数の場所でそれらを変更したくないです。私はちょうど私が使用するものを決める場所でそれらを一度変更したいです。 – 0fnt
さて、プロバイダー関数はあなたが決める場所です。 – lovei
キーは、インジェクターが異なる「DictionaryProvider」インスタンスを作成し、そのためにインジェクターが作成するものを知る必要があるということです。別のアプローチでは、注釈付きの「DictonaryProvider」引数を使用しています(例:'@ Named')、同じ情報を引き続きハードコードしたり、引数リストのインジェクタを要求したり、' getInstance'を呼び出してリスト要素を構築したりします。後者はより自由度が増し、実行時に辞書を選択することさえ可能になります。 – lovei