2 votes

Android Dagger2 2.11 référence non scopée des composants de l'application liens scopés

J'utilise la démo de dagger2 par https://medium.com/@iammert/new-Android-injector-with-dagger-2-part-1-8baa60152abe . J'ai ajouté SharedPreferences à mon AppModule.java.

@Module(subcomponents = {
    MainActivityComponent.class,
    DetailActivityComponent.class,
    Detail2ActivityComponent.class})
public class AppModule {

@Provides
@Singleton
Context provideContext(Application application) {
    return application;
    }

@Provides
@Singleton //if i remove dagger works right
SharedPreferences providesSharedPreferences(Application application) {
    return PreferenceManager.getDefaultSharedPreferences(application);
    }

}

J'injecte SharedPreferences dans MainActivity. Après avoir reconstruit le projet, j'obtiens une erreur

enter image description here Si je supprime l'annotation @Singleton de providesSharedPreferences, le projet se reconstruit correctement. Pourquoi l'annotation @Singleton by providesSharedPreferences pose-t-elle problème ?

8voto

tim.paetz Points 1637

Vous devez ajouter @Singleton à la classe AppComponent :

    @Singleton // <---- Add this line
    @Component(modules = {
        AndroidInjectionModule.class,
        AppModule.class,
        ActivityBuilder.class})
    public interface AppComponent {

        @Component.Builder
        interface Builder {
          @BindsInstance Builder application(Application application);
          AppComponent build();
        }

        void inject(AndroidSampleApp app);
    }

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X