在文档中它说@Provides方法可能自己具有依赖项,例如:
@Provides Pump providePump(Thermosiphon pump) {
return pump;
}
如果我这样写,将会改变什么:
@Provides Pump providePump() {
return new Thermosiphon();
}
在第一个片段中:方法是从哪里获得泵的?
最佳答案
该文档还显示了Thermosiphon
类:
class Thermosiphon implements Pump {
private final Heater heater;
@Inject
Thermosiphon(Heater heater) {
this.heater = heater;
}
...
}
此类的构造函数用
@Inject
注释。这使Dagger知道在需要Thermosiphon
时会使用此构造方法,并自动为其提供Heater
实例,因此您不必这样做。您自己创建一个新的
Thermospihon
实例非常好,但是Dagger通过这样做可以为您省去麻烦。例如,如果您手动进行操作,则需要从某个地方获取一些Heater
参考。这就是Dagger的全部目的,因此您不必进行繁琐的重复工作。