Sobes.tech
Junior — Middle

¿En qué se diferencia el mecanismo Binds de Provides en el contexto de inyección de dependencias o sistemas modulares?

sobes.tech AI

Respuesta de la IA

En el contexto de la inyección de dependencias (por ejemplo, Dagger en Android), las anotaciones @Provides y @Binds sirven para diferentes propósitos, aunque ambas se utilizan para proporcionar dependencias.

  • @Provides se usa para métodos que crean y devuelven una instancia concreta de un objeto. Normalmente, es un método con cuerpo donde se puede escribir la lógica de creación del objeto.

  • @Binds se aplica para vincular una interfaz con su implementación sin crear una nueva instancia. El método con @Binds debe ser abstracto y simplemente devolver la implementación de la interfaz pasada como parámetro.

Ejemplo:

@Module
abstract class NetworkModule {
    @Binds
    abstract fun bindApiService(impl: ApiServiceImpl): ApiService
}

@Module
class DatabaseModule {
    @Provides
    fun provideDatabase(): Database {
        return DatabaseImpl()
    }
}

Por lo tanto, @Binds es más eficiente y simple cuando solo necesitas indicar que una interfaz es implementada por una clase concreta, mientras que @Provides se usa cuando se requiere lógica para crear el objeto.