Android Création d'un composant à partir de plusieurs modules


Exemple

Dagger 2 prend en charge la création d'un composant à partir de plusieurs modules. Vous pouvez créer votre composant de cette façon:

@Singleton
@Component(modules = {GeneralPurposeModule.class, SpecificModule.class})
public interface MyMultipleModuleComponent {
    void inject(MyFragment myFragment);
    void inject(MyService myService);
    void inject(MyController myController);
    void inject(MyActivity myActivity);
}

Les deux modules de référence GeneralPurposeModule et SpecificModule peuvent alors être implémentés comme suit:

GeneralPurposeModule.java

@Module
public class GeneralPurposeModule {
    @Provides
    @Singleton
    public Retrofit getRetrofit(PropertiesReader propertiesReader, RetrofitHeaderInterceptor headerInterceptor){
        // Logic here...
        return retrofit;
    }

    @Provides
    @Singleton
    public PropertiesReader getPropertiesReader(){
        return new PropertiesReader();
    }

    @Provides
    @Singleton
    public RetrofitHeaderInterceptor getRetrofitHeaderInterceptor(){
         return new RetrofitHeaderInterceptor();
    }
}

SpecificModule.java

@Singleton
@Module
public class SpecificModule {
    @Provides @Singleton
    public RetrofitController getRetrofitController(Retrofit retrofit){
        RetrofitController retrofitController = new RetrofitController();
        retrofitController.setRetrofit(retrofit);
        return retrofitController;
    }

    @Provides @Singleton
    public MyService getMyService(RetrofitController retrofitController){
        MyService myService = new MyService();
        myService.setRetrofitController(retrofitController);
        return myService;
    }
}

Pendant la phase d'injection de dépendance, le composant récupérera les objets des deux modules en fonction des besoins.

Cette approche est très utile en termes de modularité . Dans l'exemple, il existe un module général utilisé pour instancier des composants tels que l'objet Retrofit (utilisé pour gérer la communication réseau) et un PropertiesReader (chargé de gérer les fichiers de configuration). Il existe également un module spécifique qui gère l'instanciation de contrôleurs et de classes de service spécifiques par rapport à ce composant d'application spécifique.