小编典典

Guice:是否可以注入模块?

java

我有一个需要一些模块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的相对呆板,但是我遇到了很多尝试着做上述事情的案例。我肯定错过了什么…


阅读 216

收藏
2020-10-20

共1个答案

小编典典

@Provides方法可以将依赖项作为参数,就像带@Inject注释的构造函数或方法的参数一样:

@Provides Something provideSomething(Dependency d) {
   return new Something(d); // or whatever
}

这是记录在这里,虽然也许它可以作出更加脱颖而出。

2020-10-20