Ho il seguente modulo di semplice:Il contesto non può essere fornito senza un metodo @ Fornisce-annotato, ma lo è?
@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;
}
}
E il rispettivo componente semplice:
@Singleton
@Component(
modules = ApplicationModule.class
)
public interface ApplicationComponent {
CustomApplication getCustomApplication();
Context getApplicationContext();
}
E sto creando il componente qui:
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();
getta questo errore a compile time: Error:(22, 13) error: android.content.Context cannot be provided without an @Provides-annotated method
, ma come puoi vedere è annotato con @Provides
.
È davvero strano perché il problema scompare quando togli l'annotazione del qualificatore.
Solo nel caso, questo è il mio @ForApplication
qualificazione:
@Qualifier @Retention(RUNTIME)
public @interface ForApplication {
}
Questo è praticamente un libro di testo Dagger2 esempio. Che cosa sto facendo di sbagliato?
Stesso problema qui. Ho dovuto aggiungere '@ ForApplication' al mio costruttore:' @Inject MyThing (@ForApplication Context context) {this.context = context; } ' – anon
Non ha senso. Dove stai effettivamente chiamando 'getApplicationContext()' da ?? –
Potresti elaborare ciò che esattamente non ha senso? Non sto chiamando questo metodo, è solo una dichiarazione per il componente Dagger2. Sto solo dicendo che l'annotazione mancava nella dichiarazione di 'Context' in quell'ambito. Ecco perché ho ricevuto l'errore, perché il mio modulo ha specificato che il contesto fornito era '@ ForApplication 'e il mio componente no. – Eddnav