我想知道是否可以让模块进行特定的绑定,然后再注入这些绑定的组合。
一个简单的例子:我有一个List<SomeType>
应该被注入,并且多个模块应该能够向该列表添加/绑定元素。
基本上是在不同模块之间使用绑定(或多绑定)。
我该怎么做到?哪种方法最好?什么都想不起来。
答案 0 :(得分:1)
但是...您必须使用Set
而不是List
。
另外,在开始之前,请注意,虽然Multibinder是扩展,但已经将它集成在Guice主构件中,已有几个版本。
创建一个通用的静态方法,如下所示:
public static LinkedBindingBuilder<SomeType> bindSomeTypeSetElement(Binder binder) {
return Multibinder.newSetBinder(binder, SomeType.class).addBinding();
}
我要告诉您编写这样的方法,因为以后可以更轻松地找到绑定定义,并且如果您想将SomeType
更改为OtherType
,则会更容易完成一种方法。最后,如果您想更改绑定(例如,使用注释进行标识),也将更加容易。
现在在您想要绑定它的模块中,只需在您的configure
方法中编写以下代码:
import static path.to.SomeTypeBinder.bindSomeTypeSetElement;
public void configure() {
bindSomeTypeSetElement(binder()).toInstance(new ConcreteType());
bindSomeTypeSetElement(binder()).to(SecondConcreteType.class);
bindSomeTypeSetElement(binder()).toProvider(new ThirdConcreteTypeProvider());
}