Le contexte ne peut pas être fourni sans une méthode @ Provides-annotated, mais c'est?
J'ai le texte suivant module simple:
@Module
public class ApplicationModule {
private CustomApplication customApplication;
public ApplicationModule(CustomApplication customApplication) {
this.customApplication = customApplication;
}
@Provides @Singleton CustomApplication provideCustomApplication() {
return this.customApplication;
}
@Provides @Singleton @ForApplication Context provideApplicationContext() {
return this.customApplication;
}
}
Et de chaque composant simple:
@Singleton
@Component(
modules = ApplicationModule.class
)
public interface ApplicationComponent {
CustomApplication getCustomApplication();
Context getApplicationContext();
}
Et je suis de la création de la composante ici:
public class CustomApplication extends Application {
...
private ApplicationComponent component;
@Override
protected void attachBaseContext(Context base) {
super.attachBaseContext(base);
MultiDex.install(this);
}
@Override
public void onCreate() {
super.onCreate();
component = DaggerApplicationComponent.builder()
.applicationModule(new ApplicationModule(this))
.build();
Il met cette erreur au moment de la compilation: Error:(22, 13) error: android.content.Context cannot be provided without an @Provides-annotated method
mais comme vous pouvez le voir, il est annoté avec @Provides
.
C'est vraiment étrange parce que le problème disparaît lorsque je prends le qualificatif d'annotation off.
Juste au cas où, c'est mon @ForApplication
qualifier:
@Qualifier @Retention(RUNTIME)
public @interface ForApplication {
}
C'est pratiquement un manuel Dagger2 exemple. Ce que je fais mal?
source d'informationauteur Eddnav
Vous devez vous connecter pour publier un commentaire.
Après un certain temps d'essais et d'erreurs, j'ai semblent trouvé la cause, c'est l'ambiguïté de
Context
parce que@ForApplication
est manquant dans certains endroits oùContext
est nécessaire.Aussi, il peut être ma frêle compréhension de Dagger2 pour le moment, mais ce standard est tout à fait enclins à développeur d'erreurs.
De toute façon... pour quelqu'un qui trouve le problème vous avez juste à ajouter le qualificatif annotations dans chaque endroit que la dépendance est utilisé: