Qual é a diferença entre o mecanismo Binds e Provides no contexto de injeção de dependências ou sistemas modulares?
sobes.tech IA
Resposta da IA
No contexto da injeção de dependências (por exemplo, Dagger no Android), as anotações @Provides e @Binds servem para diferentes propósitos, embora ambas sejam usadas para fornecer dependências.
-
@Providesé usado para métodos que criam e retornam uma instância concreta de um objeto. Normalmente, é um método com corpo onde você pode escrever a lógica de criação do objeto. -
@Bindsé aplicado para vincular uma interface à sua implementação sem criar uma nova instância. O método com@Bindsdeve ser abstrato e simplesmente retornar a implementação da interface passada como parâmetro.
Exemplo:
@Module
abstract class NetworkModule {
@Binds
abstract fun bindApiService(impl: ApiServiceImpl): ApiService
}
@Module
class DatabaseModule {
@Provides
fun provideDatabase(): Database {
return DatabaseImpl()
}
}
Assim, @Binds é mais eficiente e simples quando você só precisa indicar que uma interface é implementada por uma classe concreta, enquanto @Provides é usado quando há lógica de criação do objeto.