当该对象通常是依赖注入时,如何向父构造函数提供对象?

问题描述 投票:0回答:1

假设我有这些弥补的课程(顺便说一句,我对汽车一无所知)

@Singleton
class ElectricEngine implements Engine {
}

class Vehicle {
  private final Engine engine;
  Vehicle(Engine engine, SteeringSystem ss, ...) {
    this.engine = engine;
  }
}

一般情况下,子类都是这样构建的

class Tesla extends Vehicle {
  @Inject
  Tesla(ElectricEngine engine, SteeringSystem ss) {
    super(engine, ss);
  }
}

我不希望孩子指定

Engine
并拥有诸如

之类的课程
class ElectricVehicle extends Vehicle {
  ElectricVehicle(SteeringSystem ss) {
   super(electricEngine???, ss);
  }
}

class Tesla extends ElectricVehicle {
  @Injected
  Tesla(SteerByWireSystem ss) {
    super(ss);
  }
}

问题是,

ElectricVehicle
如何才能将
ElectricEngine
对象传递给其父对象?

我考虑过进行现场注入,但不确定这是否可以解决问题,并且基于this也不喜欢它。

有什么想法吗?

java dependency-injection dagger
1个回答
0
投票

如果你想使用注入来处理你的bean,你需要注入一些东西。

单例的另一种纯 Java 解决方案是让类拥有它自己的单例实例:

class ElectricEngine implements Engine {
    private static ElectricEngine instance;

    public static ElectricEngine getElectricEngine() {
        if(instance == null) {
            instance = new ElectricEngine();
        }
        return instance;
    }
}

class Tesla extends ElectricVehicle {
  @Injected
  Tesla(SteerByWireSystem ss) {
    super(ElectricEngine.getElectricEngine(), ss);
  }
}
© www.soinside.com 2019 - 2024. All rights reserved.