Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

1.9K
Vistas
Daga 2: no se puede proporcionar sin un método anotado por @Provides

Acabo de empezar a aprender dagger2 y enfrenté un problema extraño que me parece un error. Aquí está el módulo:

 @Module public class SimpleModule { @Provides Cooker providerCooker() { return new Cooker("tom", "natie"); } }

Componente:

 @Component(modules = SimpleModule.class) public interface SimpleComponent { void inject(DaggerTestActivity activity); }

Interfaz:

 public interface CoffeeMaker { String makeCoffee(); }

Implementación:

 public class SimpleMaker implements CoffeeMaker { Cooker mCooker; @Inject public SimpleMaker(Cooker cooker) { this.mCooker = cooker; } @Override public String makeCoffee() { return mCooker.makeCoffee(); } }

Horno :

 public class Cooker { String name; String coffeeKind; public Cooker(String name, String coffeeKind) { this.name = name; this.coffeeKind = coffeeKind; } public String makeCoffee() { return name + "make" + coffeeKind; } }

Maquina de cafe:

 public class CoffeeMachine { CoffeeMaker mMaker; @Inject public CoffeeMachine(CoffeeMaker coffeeMaker) { this.mMaker = coffeeMaker; } public String makeCoffee() { return mMaker.makeCoffee(); } }

Solo esto. Lo uso en la actividad. Se enfrentó a un problema extraño aquí:

 @Inject CoffeeMachine mCoffeeMachine;

El error que recibo del compilador Dagger 2 es el siguiente:

 Error:(14, 10) com.wyyc.daggertest.CoffeeMaker cannot be provided without an @Provides-annotated method. com.wyyc.zqqworkproject.DaggerTestActivity.mCoffeeMachine [injected field of type: com.wyyc.daggertest.CoffeeMachine mCoffeeMachine] com.wyyc.daggertest.CoffeeMachine.<init>(com.wyyc.daggertest.CoffeeMaker coffeeMaker)

Toda esta situación parece muy extraña, y me gustaría escuchar algunos aportes de usuarios más experimentados de Dagger 2.

over 4 years ago · Santiago Trujillo
2 Respuestas
Responde la pregunta

0

Su CoffeeMachine necesita CoffeeMaker . Y ha declarado que Dagger se encargará de proporcionar esa dependencia a CoffeeMachine al anotar el constructor con @Inject . Pero Daga dice:

CoffeeMaker no se puede proporcionar sin un método anotado por @Provides

Porque no ha especificado en ninguna parte cómo se debe crear el objeto CoffeeMaker . @Inject SimpleMaker no es suficiente, porque SimpleMaker != CoffeeMaker . Por lo tanto, debe especificar explícitamente que cuando Dagger quiera CoffeeMaker , proporcione SimpleMaker .

Cambie su módulo a esto:

 @Module public class SimpleModule { @Provides Cooker providerCooker() { return new Cooker("tom", "natie"); } @Provides CoffeeMaker provideCoffeeMaker(Cooker cooker) { return new SimpleMaker(cooker); } }
over 4 years ago · Santiago Trujillo Denunciar

0

En mi caso, me perdí un módulo en @Component (en la aplicación de varios módulos). Gracias a @azizbekian.

 @Component( modules = [ ApiModule::class, SettingsModule::class, CoroutinesModule::class // <- I forgot one of these modules ], dependencies = [Api::class, NetworkProvider::class] ) interface YourComponent {
over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda