我有一个需要一些模块Depedency。有没有办法可以注入模块本身?我意识到这有点麻烦。
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就是要减少样板混乱?
@Provides
Provider<Something>
Provider<...>
也许这反映了我对Guice的相对呆板,但是我遇到了很多尝试着做上述事情的案例。我肯定错过了什么…
@Provides方法可以将依赖项作为参数,就像带@Inject注释的构造函数或方法的参数一样:
@Inject
@Provides Something provideSomething(Dependency d) { return new Something(d); // or whatever }
这是记录在这里,虽然也许它可以作出更加脱颖而出。