Я пытаюсь внедрить поле с помощью кинжала, хотя внедрение конструктора работает абсолютно нормально, но я не знаю, что не так с внедрением поля. Может быть, я делаю неправильно. Я добавляю фрагменты кода. Я получаю исключение нулевого указателя на engine.start(), потому что зависимость двигателя не подается. Это похоже на зависимости A->B->C, где A->B подается, а B->C нет. Давно не могу решить.
package com.raghav.java.car;
import javax.inject.Inject;
public class App
{
@Inject
Car car;
App() {
DaggerCarComponent.create().inject(this);
}
public static void main( String[] args )
{
App app = new App();
app.perform();
}
private void perform() {
car.run();
}
}
public interface Engine {
void start();
}
class FordEngine implements Engine {
public void start() {
System.out.println("Engine started -- Vroom Vroom");
}
}
public interface Car {
void run();
}
class MarutiCar implements Car {
@Inject
Engine engine;
public void run() {
engine.start();
System.out.println("WOW!! Maruti Running ");
}
}
@Singleton
@Component(modules = {CarModule.class})
public interface CarComponent {
void inject(App app);
}
@Module
class CarModule {
@Singleton
@Provides
public Car provideCar() {
return new MarutiCar();
}
@Singleton
@Provides
public Engine provideEngine() {
return new FordEngine();
}
}