Koin para Kotlin: guía completa con ejemplos

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

Introducción a Koin: qué es y para qué sirve

\n\n

Koin es un framework ligero, potente e intuitivo para la inyección de dependencias (Dependency Injection, DI) en Kotlin. A diferencia de soluciones pesadas como Dagger o Spring, Koin no utiliza reflexión, anotaciones ni generación de código. Todo se basa en construcciones DSL simples (Domain Specific Language), lo que hace que el código sea limpio, legible y fácil de probar.

\n\n

¿Para qué sirve Koin? En el desarrollo moderno de aplicaciones complejas, la gestión de dependencias entre clases es una de las tareas clave. Sin DI, crearías objetos manualmente, lo que genera un acoplamiento rígido del código, dificulta las pruebas y el mantenimiento. Koin resuelve estos problemas proporcionando una forma sencilla de registrar, configurar y obtener dependencias.

\n\n

Ventajas clave de Koin:

\n
    \n
  • Ligereza: Impacto mínimo en el tamaño del APK y el tiempo de compilación.
  • \n
  • Simplicidad: No requiere anotaciones, reflexión ni generación de código.
  • \n
  • Kotlin-first: Aprovecha al máximo las capacidades del lenguaje (DSL, lambdas, corrutinas).
  • \n
  • Modularidad: Permite dividir las dependencias en módulos lógicos.
  • \n
  • Capacidad de prueba: Fácil de reemplazar dependencias en las pruebas.
  • \n
  • Soporte para Android: Tiene módulos especiales para Android (ViewModel, Fragment, Compose).
  • \n
\n\n

Instalación de Koin

\n\n

Koin se distribuye a través de Maven Central. Para agregarlo a tu proyecto, añade las dependencias en el archivo build.gradle.kts (o build.gradle).

\n\n

Para proyecto Kotlin Multiplatform / JVM:

\n
// build.gradle.kts\ndependencies {\n    // Módulo principal de Koin\n    implementation("io.insert-koin:koin-core:3.5.6")\n    \n    // Para pruebas\n    testImplementation("io.insert-koin:koin-test:3.5.6")\n}
\n\n

Para proyecto Android:

\n
// build.gradle.kts (módulo app)\ndependencies {\n    // Módulo principal\n    implementation("io.insert-koin:koin-android:3.5.6")\n    \n    // Para ViewModel\n    implementation("io.insert-koin:koin-androidx-viewmodel:3.5.6")\n    \n    // Para Jetpack Compose\n    implementation("io.insert-koin:koin-androidx-compose:3.5.6")\n    \n    // Para WorkManager\n    implementation("io.insert-koin:koin-androidx-workmanager:3.5.6")\n    \n    // Para pruebas\n    testImplementation("io.insert-koin:koin-test:3.5.6")\n    testImplementation("io.insert-koin:koin-test-junit5:3.5.6")\n}
\n\n

Importante: Las versiones pueden cambiar. Siempre puedes verificar la versión actual en el repositorio de GitHub de Koin.

\n\n

Inicio rápido con Koin

\n\n

Veamos un ejemplo simple: tenemos un servicio UserService que depende de UserRepository. En lugar de crear el repositorio manualmente, usamos Koin.

\n\n

Paso 1: Definimos las clases

\n
// Repositorio de usuarios\nclass UserRepository {\n    fun getUsers(): List<String> = listOf("Alice", "Bob", "Charlie")\n}\n\n// Servicio que utiliza el repositorio\nclass UserService(private val repository: UserRepository) {\n    fun printUsers() {\n        repository.getUsers().forEach { println(it) }\n    }\n}
\n\n

Paso 2: Creamos un módulo de Koin

\n
// Módulo — es un contenedor donde describimos cómo crear dependencias\nval appModule = module {\n    // single — crea una única instancia para toda la aplicación (singleton)\n    single<UserRepository> { UserRepository() }\n    \n    // factory — crea una nueva instancia en cada solicitud\n    factory { UserService(get()) } // get() — solicita la dependencia UserRepository\n}
\n\n

Paso 3: Iniciamos Koin

\n
// En el punto de entrada de la aplicación (main o Application)\nfun main() {\n    // Iniciamos Koin                    

Recommendations