作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想知道是否可以让模块进行特定的绑定(bind),然后注入(inject)这些绑定(bind)的组合。
简单的例子:我有一个 List<SomeType>
应该被注入(inject),并且多个模块应该能够向该列表添加/绑定(bind)元素。基本上在不同的模块中使用绑定(bind)(或多重绑定(bind))。我怎样才能做到这一点以及哪种方法最好?想不出什么。
最佳答案
但是...您必须使用Set
而不是List
。
此外,在开始之前,请注意,虽然 Multibinder 是一个扩展,但它已经集成到几个版本的主要 Guice 工件中。
创建一个像这样的通用静态方法:
public static LinkedBindingBuilder<SomeType> bindSomeTypeSetElement(Binder binder) {
return Multibinder.newSetBinder(binder, SomeType.class).addBinding();
}
我告诉你编写这样的方法是因为以后更容易找到绑定(bind)定义,并且如果你想将 SomeType
更改为 OtherType
,用一种方法会更容易完成。最后,如果您想更改绑定(bind)(例如,使用注释进行识别),也更容易。
现在,在您想要绑定(bind)它的模块中,只需在 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());
}
关于java - Guice - 如何让多个模块为一件事做出贡献?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56685374/
我是一名优秀的程序员,十分优秀!