我有一个公开方法的服务。我有一个该方法的实现,可以聚合同一服务的其他实现的结果。我如何通过注入将其他实现列表注入到聚合实现中?例如:注入注入实例的列表
我有一个特质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