Introduction à Koin : qu'est-ce que c'est et pourquoi l'utiliser
\n\nKoin est un framework léger, puissant et intuitif pour l'injection de dépendances (Dependency Injection, DI) en Kotlin. Contrairement aux solutions lourdes comme Dagger ou Spring, Koin n'utilise ni réflexion, ni annotations, ni génération de code. Tout repose sur des constructions DSL simples (Domain Specific Language), ce qui rend le code propre, lisible et facilement testable.
\n\nPourquoi utiliser Koin ? Dans le développement moderne d'applications complexes, la gestion des dépendances entre les classes est l'une des tâches clés. Sans DI, vous créerez des objets manuellement, ce qui entraîne un couplage fort du code, complique les tests et la maintenance. Koin résout ces problèmes en offrant un moyen simple d'enregistrer, configurer et obtenir des dépendances.
\n\nPrincipaux avantages de Koin :
\n- \n
- Légèreté : Impact minimal sur la taille de l'APK et le temps de compilation. \n
- Simplicité : Ne nécessite ni annotations, ni réflexion, ni génération de code. \n
- Kotlin-first : Utilise pleinement les capacités du langage (DSL, lambdas, coroutines). \n
- Modularité : Permet de diviser les dépendances en modules logiques. \n
- Testabilité : Remplacement facile des dépendances dans les tests. \n
- Support Android : Dispose de modules spéciaux pour Android (ViewModel, Fragment, Compose). \n
Installation de Koin
\n\nKoin est distribué via Maven Central. Pour l'ajouter à votre projet, ajoutez les dépendances dans le fichier build.gradle.kts (ou build.gradle).
Pour un projet Kotlin Multiplatform / JVM :
\n// build.gradle.kts\ndependencies {\n // Module principal Koin\n implementation("io.insert-koin:koin-core:3.5.6")\n \n // Pour les tests\n testImplementation("io.insert-koin:koin-test:3.5.6")\n}\n\nPour un projet Android :
\n// build.gradle.kts (module app)\ndependencies {\n // Module principal\n implementation("io.insert-koin:koin-android:3.5.6")\n \n // Pour ViewModel\n implementation("io.insert-koin:koin-androidx-viewmodel:3.5.6")\n \n // Pour Jetpack Compose\n implementation("io.insert-koin:koin-androidx-compose:3.5.6")\n \n // Pour WorkManager\n implementation("io.insert-koin:koin-androidx-workmanager:3.5.6")\n \n // Pour les tests\n testImplementation("io.insert-koin:koin-test:3.5.6")\n testImplementation("io.insert-koin:koin-test-junit5:3.5.6")\n}\n\nImportant : Les versions peuvent changer. La version actuelle est toujours disponible sur le dépôt GitHub de Koin.
\n\nDémarrage rapide avec Koin
\n\nPrenons un exemple simple : nous avons un service UserService qui dépend de UserRepository. Au lieu de créer le repository manuellement, nous utilisons Koin.
Étape 1 : Définir les classes
\n// Repository des utilisateurs\nclass UserRepository {\n fun getUsers(): List<String> = listOf("Alice", "Bob", "Charlie")\n}\n\n// Service qui utilise le repository\nclass UserService(private val repository: UserRepository) {\n fun printUsers() {\n repository.getUsers().forEach { println(it) }\n }\n}\n\nÉtape 2 : Créer un module Koin
\n// Module — un conteneur où nous décrivons comment créer les dépendances\nval appModule = module {\n // single — crée une seule instance pour toute l'application (singleton)\n single<UserRepository> { UserRepository() }\n \n // factory — crée une nouvelle instance à chaque demande\n factory { UserService(get()) } // get() — demande la dépendance UserRepository\n}\n\nÉtape 3 : Démarrer Koin
\n// Au point d'entrée de l'application (main ou Application)\nfun main() {\n // Démarrer Koi Aussi dans la bibliothèque
Travailler avec Apache Kafka en C++ : la bibliothèque librdkafka et exemples pratiques
Framework CLI pour Rust : Clap — un outil puissant et pratique pour créer des applications console