在文档中它说@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的全部目的,因此您不必进行繁琐的重复工作。

07-28 02:32