2017-05-01 2 views
1

J'essayais de contourner Dagger2 mais j'ai eu des problèmes avec l'injection sur le terrain, et voici mon code.Dagger2 ne peut pas injecter de champ à l'intérieur de la classe injectée

classes POJO:

// User.java 
public class User { 
    private String firstName, lastName; 
    public User(String firstName, String lastName) { 
     this.firstName = firstName; 
     this.lastName = lastName; 
    } 
} 

La classe que je ne peux pas injecter le champ user.

//BackendService.java 
public class BackendService { 
    @Inject 
    public User user; // Not injected -> Null 

    @Inject 
    public BackendService() { 
    } 
} 

classe fournisseur d'utilisateur

// UserModule.java 
@Module 
public class UserModule { 

    @Provides 
    @Singleton 
    User providesUser() { 
     return new User("AA","BB"); 
    } 
} 

fournisseur backend classe

// BackendServiceModule.java 
@Module 
public class BackendServiceModule { 
    @Provides 
    BackendService provideBackendService() { 
     return new BackendService(); 
    }  
} 

Et last but not least, le composant

// ApplicationComponent.java 
@Component(modules = {UserModule.class, BackendServiceModule.class}) 
public interface ApplicationComponent { 
    BackendService provideBackendService(); 
    void inject(ConsumerMain consumerMain); 
} 

Le problème est que dans BackendService.java le domaine user ne s'injecte pas.

injection fonctionne correctement sur BackendService

Répondre

3

Supprimer votre méthode @Provides BackendService. Quand vous appelez new BackendService(), vous dites à Dagger "ne vous inquiétez pas comment créer un BackendService, je peux le faire pour vous". Cela empêche également Dagger d'appeler les constructeurs et méthodes @Inject -annotated, ou de remplir les champs @Inject -annotated. Lorsque vous supprimez cette méthode, Dagger inspectera BackendService pour apprendre à l'instancier lui-même, à quel point il verra votre constructeur et champ @Inject et les utilisera pour construire un BackendService lorsque cela est nécessaire.

+0

Cela a résolu mes problèmes, merci d'illustrer le problème :-) –