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:
@Providesse usa para crear instancias de objetos, a menudo con lógica más compleja o dependencias.@Bindsse 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.