Je suis en train d'essayer une injection de champ avec un poignard bien que l'injection du constructeur fonctionne parfaitement bien mais je ne sais pas ce qui ne va pas avec l'injection de champ. Peut-être que je fais mal. J'ajoute les extraits de code. J'obtiens une exception de pointeur null sur engine.start() car la dépendance au moteur n'est pas alimentée. Il est similaire aux dépendances A-> B-> C où A-> B est alimenté mais pas B-> C. Cela fait longtemps que je suis incapable de résoudre.Injection de champs de dague ne fonctionnant pas avec de simples classes Java
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();
}
}
L'injection du constructeur fonctionne absolument bien comme indiqué ci-dessus mais pourquoi l'injection de champ ne fonctionne pas? et pouvez-vous montrer l'instance où il est écrit "pour faire une injection imbriquée, vous devez utiliser l'injection du constructeur sinon cela n'arrivera pas automatiquement". Pourquoi il n'est pas possible d'avoir une injection de champ dans les dépendances imbriquées. Et il y a une question http://stackoverflow.com/questions/28330117/dagger-nested-injections-is-it-necessary-to-call-inject qui montre l'injection de champ est possible dans dagger1 alors pourquoi cela ne peut-il pas être possible dans Dagger2 . Et merci d'avoir répondu! –
http://stackoverflow.com/questions/21694326/nested-recursive-injections-with-dagger regardez ce lien. cela explique pourquoi cela arrive. –
Dagger est responsable de créer vos dépendances de ne pas injecter leurs champs injectés sauf si vous créez le composant en eux aussi. Dagger fournit uniquement les dépendances qui sont obligatoires pour créer une instance (en ajoutant un @inject à la construction). il ne cherche pas et n'injecte pas pour chaque champ dans cette dépendance. –