Sobes.tech
Middle+

Habla sobre las anotaciones de Dagger @Provides y @Binds

sobes.tech AI

Respuesta de la IA

La anotación @Provides se utiliza en módulos para definir métodos que crean instancias de dependencias. Estos métodos están marcados con @Provides y devuelven el tipo de dependencia que proporcionan. En el cuerpo del método se encuentra la lógica para crear la instancia.

@Module
class AppModule {

    @Provides
    fun provideDatabase(context: Context): AppDatabase {
        // Lógica para crear la base de datos
        return Room.databaseBuilder(context, AppDatabase::class.java, "app-database").build()
    }
}

La anotación @Binds se usa en módulos para indicar que una interfaz está vinculada a una implementación concreta. Se aplica a métodos abstractos que toman como parámetro la implementación y devuelven la interfaz. Dagger genera un código más eficiente para @Binds en comparación con @Provides, ya que no requiere llamar a un método para crear la instancia.

@Module
interface AppBindsModule {

    @Binds
    fun bindRepository(impl: DefaultRepository): Repository
}

interface Repository { /* ... */ }
class DefaultRepository @Inject constructor(): Repository { /* ... */ }

Diferencias principales:

  • @Provides se usa para crear instancias de objetos, a menudo con lógica más compleja o dependencias.
  • @Binds se usa para vincular tipos abstractos (interfaces) con sus implementaciones concretas, lo cual es más eficiente cuando no hay lógica compleja en la creación.