我有一個公開方法的服務。我有一個該方法的實現,可以聚合同一服務的其他實現的結果。我如何通過注入將其他實現列表注入到聚合實現中?例如:注入注入實例的列表
我有一個特質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
對於這種特殊情況)(訂單應該很容易改變,只需要在一個地方更改)
編輯:我編輯了一個問題,使其更清晰。
我不不喜歡參數類型是硬編碼的。他們可以是10箇中的任何一個,我不想在多個地方手動更改它們。我只是想在我決定使用哪一個的地方改變它們一次。 – 0fnt
那麼,提供者函數是你決定的唯一地方:) – lovei
關鍵是你想讓注入器創建不同的'DictionaryProvider'實例,爲此,注入器必須知道要創建哪些實例。其他方法使用帶註釋的'DictonaryProvider'參數(例如'@ Named'),它仍然對相同的信息進行硬編碼,或者在參數列表中詢問一個注入器並通過調用'getInstance'來構造列表元素。後者會給你更多的自由,甚至可以在運行時選擇字典。 – lovei