我正在嘗試使用Dagger2進行現場注入。我意識到我需要在注入方法時手動調用注入。我主要試圖爲汽車注入發動機。引擎在運行時決定,並注入。Dagger2基礎知識 - 現場注入 - 不能正常工作
的數據是這樣的
CarInterface
import dagger.Binds;
public interface Car {
public void run();
}
汽車實現
public class Volkswagen implements Car {
@Inject
public Engine engine;
public void run() {
// TODO Auto-generated method stub
System.out.println("About to Run");
engine.start();
}
}
引擎接口
public interface Engine {
public String start();
}
引擎實現
public class Ferrari4Cylinder implements Engine{
@Override
public String start() {
// TODO Auto-generated method stub
return "Ignition----Vroom-- Vroom-- Sweet Purring Sound";
}
}
車載模塊
public class CarModule{
@Provides @Singleton
Car provideCar(){
return new Volkswagen();
}
}
引擎模塊
@Module
public class EngineModule {
@Provides @Singleton
public Engine provideEngine(){
return new Ferrari4Cylinder();
}
}
組件類
@Singleton
@Component(modules = {CarModule.class, EngineModule.class})
public interface MyCarComponent {
public Car provideCar();
void inject(Car car);
}
主要方法
public class Main {
public static void main(String[] args) {
// TODO Auto-generated method stub
MyCarComponent carComponent= DaggerMyCarComponent.builder().build();
Car car = carComponent.provideCar();
carComponent.inject(car);
car.run();
}
}
出於某種原因: Car.run()方法始終返回null,因爲引擎永遠不會被注入。 線程「main」中的異常java.lang.NullPointerException
任何人都可以幫助解決這裏發生的事情嗎?
更新日期09/02/2016: 我發現以下更改組件指向實際的實現工作如下所示。不知道爲什麼另一個沒有,但它幫助我在這個問題上前進。
@Singleton
@Component(modules = {CarModule.class, EngineModule.class})
public interface MyCarComponent {
public Volkswagen provideCar();
void inject(Volkswagen car);
}
希望這有助於人們試圖解決匕首的場噴射問題。
此代碼,如果車廂接口是不存在的工作完全正常。我遇到了錯誤還是缺少符號? –
我仍然無法理解爲什麼它不起作用。我像你一樣製作了虛擬項目,並且現場注入不適用於該項目。我在最後的評論中提出了改變,將其更改爲Volkwagen汽車,但仍然無法成功運行該項目。它仍然給出空指針異常。 –
你能弄清楚這一點嗎?如果你可以給我發送代碼,我可以看看? –