La Inyección de Dependencias (DI) es un patrón de diseño en el que los objetos (clases) no crean sus propias dependencias, sino que estas se les proporcionan (inyectan) desde el exterior. Esto se hace para:
Reducir el acoplamiento entre clases.
Facilitar el cambio de implementaciones.
Simplificar las pruebas, ya que se pueden proporcionar dependencias simuladas (mocks).
En el contexto de Android, la DI es especialmente útil para administrar dependencias como repositorios, servicios y ViewModels.
¿Qué es Koin?
Koin es un framework ligero para la inyección de dependencias en Kotlin. Diseñado con un enfoque minimalista, Koin permite configurar y gestionar dependencias de manera declarativa y sencilla. Sus principales características son:
Simplicidad: No requiere generación de código ni anotaciones.
Modularidad: Permite dividir las dependencias en módulos reutilizables.
Compatibilidad: Funciona perfectamente con Jetpack Compose y Android.
Configuración de Koin en Jetpack Compose
En el archivo build.gradle del módulo, añade las dependencias necesarias:
Crea un archivo Kotlin en el paquete di del proyecto para definir la inyección de dependencias. Por ejemplo:
AppModule.kt
val appModule = module {
// Singleton del FirebaseFirestore
single { FirebaseFirestore.getInstance() }
// Singleton del respositorio de usuarios, se le inyecta el FirebaseFirestore creado en la sección anterior
single<UserRepository> { UserFirestoreRepository(get()) }
// Usamos factory para que proporcione una instancia del UseCase cada vez que se solicite
factory { GetUsersUseCase(get()) }
// Usamos factory para que proporcione una instancia del UseCase cada vez que se solicite
factory { DeleteUserUseCase(get()) }
// Crea el viewModel con las dependencias que tenga definidas
viewModel { UsersScreenViewModel(get(), get()) }
}
2
Crear una clase Application para iniciar Koin
En el paquete base del proyecto, crea una clase que defina cómo se inicia la aplicación
MyUserApp.kt
class MyUserApp : Application() {
override fun onCreate() {
super.onCreate()
startKoin {
androidContext(this@MyUserApp)
modules(appModule)
}
}
}
3
Actualiza el AndroidManifest.xml con la aplicación que acabamos de crear
Se debe poner el nombre de la clase que extiende Application en la propiedad android:name, precedida por un .