Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


El contexto no se puede proporcionar sin un @ Proporciona-anotó el método, pero es?

Tengo el siguiente módulo 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; } } 

Y el respectivo componente simple:

 @Singleton @Component( modules = ApplicationModule.class ) public interface ApplicationComponent { CustomApplication getCustomApplication(); Context getApplicationContext(); } 

Y estoy creando el componente aquí:

 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(); 

Se genera este error en tiempo de compilación: Error:(22, 13) error: android.content.Context cannot be provided without an @Provides-annotated method , pero como se puede ver se anota con @Provides .

Es realmente extraño porque el problema desaparece cuando retiro la anotación del calificador.

Por si acaso, este es mi calificador @ForApplication :

 @Qualifier @Retention(RUNTIME) public @interface ForApplication { } 

Esto es prácticamente un ejemplo de libro de texto Dagger2. ¿Qué estoy haciendo mal?

  • Dagger no puede encontrar miembros inyectables en un módulo
  • Dagger 2 en Android @Singleton clase anotada que no se inyecta
  • Dagger 2 problema sobreponiendo único proporciona el método anotado de un módulo en una biblioteca que la aplicación utiliza
  • Dagger para Android: Inyección de una actividad en el gráfico de objetos después de llamar a setContentView
  • Dagger- ¿Debemos crear cada componente y módulo para cada Actividad / Fragmento
  • Dagger2 no genera archivos "Dagger_"
  • Uso de Dagger para inyección de dependencia en constructores
  • Comprensión de los alcances en Daga 2
  • One Solution collect form web for “El contexto no se puede proporcionar sin un @ Proporciona-anotó el método, pero es?”

    Después de bastante tiempo de ensayo y error, parece que he encontrado la causa, es la ambigüedad del Context porque @ForApplication falta en algunos lugares donde se necesita Context .

    También puede ser mi frágil comprensión de Dagger2 en este momento, pero este boilerplate es bastante propenso a errores de desarrollador.

    De todos modos … para cualquiera que encuentre el problema sólo tienes que agregar las anotaciones de calificador en cada lugar que se utiliza la dependencia:

     @Singleton @Component( modules = ApplicationModule.class ) public interface ApplicationComponent { CustomApplication getCustomApplication(); @ForApplication Context getApplicationContext(); } 
    FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.