Middle+
Fale sobre as anotações Dagger @Provides e @Binds
sobes.tech IA
Resposta da IA
A anotação @Provides é usada em módulos para definir métodos que criam instâncias de dependências. Esses métodos são marcados com @Provides e retornam o tipo de dependência que fornecem. No corpo do método, encontra-se a lógica para criar a instância.
@Module
class AppModule {
@Provides
fun provideDatabase(context: Context): AppDatabase {
// Lógica para criar a base de dados
return Room.databaseBuilder(context, AppDatabase::class.java, "app-database").build()
}
}
A anotação @Binds é usada em módulos para indicar que uma interface está vinculada a uma implementação concreta. Aplica-se a métodos abstratos que tomam como parâmetro a implementação e retornam a interface. O Dagger gera um código mais eficiente para @Binds em comparação com @Provides, pois não requer a chamada de um método para criar a instância.
@Module
interface AppBindsModule {
@Binds
fun bindRepository(impl: DefaultRepository): Repository
}
interface Repository { /* ... */ }
class DefaultRepository @Inject constructor(): Repository { /* ... */ }
Diferença principal:
@Providesé usado para criar instâncias de objetos, muitas vezes com lógica mais complexa ou dependências.@Bindsé usado para vincular tipos abstratos (interfaces) às suas implementações concretas, o que é mais eficiente na ausência de lógica complexa de criação.