使用 google guice 和 dagger 在抽象类中进行依赖注入

问题描述 投票:0回答:0
`I have an abstract class Vehicle. I have to inject a dependency "Engine" in this abstract class and make use of this object in one of the concrete methods. Can anyone help me how to do this using Google guice framework using dagger annotations.`
`// Vehicle.java`
public abstract class Vehicle {
    private final Engine engine;

    public Vehicle(Engine engine) {
        this.engine = engine;
    }

    public void clean() {
        engine.wash();
    }

    public void run() {
        engine.start();
    }
}

`// Engine.java`
public class Engine {
    public void wash() {
        System.out.println("Washing engine...");
    }

    public void start() {
        System.out.println("Starting engine...");
    }
}

`// AppModule.java`
@Module
public abstract class AppModule {
    @Singleton
    @Provides
    public static Engine provideEngine() {
        return new Engine();
    }
    @Singleton
    @Provides
    public static Engine provideVehicle(Engine engine) {
        return new vehicle(engine);
    }`I am getting error here that "abstract class cannot be instantiated"`
}


`// Main.java`
public class Main {
    public static void main(String[] args) {
        Injector injector = Guice.createInjector(new AppModule());
        Vehicle vehicle = injector.getInstance(Vehicle.class);
        vehicle.clean();
        vehicle.run();
    }
}

//这个 Engine 对象没有被注入到 Vehicle 抽象类中,我在测试时得到 NullpointerException。

有人可以帮我做这个配置吗

我没有在谷歌上找到太多关于这个问题的资源。我尝试了几种可能的方法,但我无法解决这个问题。

java dependency-injection abstract-class guice dagger
© www.soinside.com 2019 - 2024. All rights reserved.