gpt4 book ai didi

java - Dagger2 基础 - 场注入(inject) - 不工作

转载 作者:行者123 更新时间:2023-12-01 07:31:52 24 4
gpt4 key购买 nike

我正在尝试使用 Dagger2 进行场注入(inject)。我意识到在方法注入(inject)的情况下我需要手动调用注入(inject)。我主要是想为汽车注入(inject)引擎。引擎在运行时决定并注入(inject)。

数据是这样的

汽车界面

import dagger.Binds;

public interface Car {

public void run();
}

汽车实现

public class Volkswagen implements Car {

@Inject
public Engine engine;

public void run() {
System.out.println("About to Run");
engine.start();
}
}

引擎界面

public interface Engine {
public String start();
}

引擎实现

public class Ferrari4Cylinder implements Engine {

@Override
public String start() {
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) {
MyCarComponent carComponent= DaggerMyCarComponent.builder().build();
Car car = carComponent.provideCar();
carComponent.inject(car);
car.run();
}
}

出于某种原因:Car.run() 方法始终返回 null,因为从未注入(inject)引擎。线程“main”中的异常 java.lang.NullPointerException

任何人都可以帮助解决这里发生的事情吗?

2016 年 9 月 2 日更新:我发现以下更改组件以指向实际实现的方法如下所示。不知道为什么另一个没有,但它帮助我在这个问题上取得了进展。

@Singleton
@Component(modules = {CarModule.class, EngineModule.class})
public interface MyCarComponent {
public Volkswagen provideCar();
void inject(Volkswagen car);
}

希望这可以帮助人们解决 Dagger 中的字段注入(inject)问题。

最佳答案

您需要使用@Inject 注释您的Engine 字段。我也相信你会需要向您的注入(inject)方法提供已实现的类(Volkswagen 而不仅仅是 Car)。

public class Volkswagen implements Car {

@Inject public Engine engine;

public void run() {
System.out.println("About to Run");

engine.start();
}
}

--

@Singleton
@Component(modules = {CarModule.class, EngineModule.class})
public interface MyCarComponent {

public Car provideCar();
void inject(Volkswagen car);

}

关于java - Dagger2 基础 - 场注入(inject) - 不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42088929/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com