Sobes.tech
Junior — Middle

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 @Binds deve 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.