Guice:是否可以注入模块?
问题内容:
我有一个需要一些模块Depedency
。有没有办法可以注入模块本身?我意识到这有点麻烦。
例:
public class MyModule implements Module {
private final Dependency d_;
@Inject public MyModule(Dependency d) {
d_ = d;
}
public void configure(Binder b) { }
@Provides Something provideSomething() {
// this requires d_
}
}
我想在这种情况下,解决方案是将@Provides
方法转换为完整的Provider<Something>
类。这显然是一个简化的示例;我正在处理的代码有很多这样的@Provides
方法,因此将它们分成单独的Provider<...>
类并引入配置它们的模块会增加相当多的混乱-
我认为Guice就是要减少样板混乱?
也许这反映了我对Guice的相对呆板,但是我遇到了很多尝试着做上述事情的案例。我肯定错过了什么…
问题答案:
@Provides
方法可以将依赖项作为参数,就像带@Inject
注释的构造函数或方法的参数一样:
@Provides Something provideSomething(Dependency d) {
return new Something(d); // or whatever
}
这是记录在这里,虽然也许它可以作出更加脱颖而出。