Koin pour Kotlin : guide complet avec exemples

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

Introduction à Koin : qu'est-ce que c'est et pourquoi l'utiliser

\n\n

Koin 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\n

Pourquoi 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\n

Principaux 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
\n\n

Installation de Koin

\n\n

Koin est distribué via Maven Central. Pour l'ajouter à votre projet, ajoutez les dépendances dans le fichier build.gradle.kts (ou build.gradle).

\n\n

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\n

Pour 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\n

Important : Les versions peuvent changer. La version actuelle est toujours disponible sur le dépôt GitHub de Koin.

\n\n

Démarrage rapide avec Koin

\n\n

Prenons un exemple simple : nous avons un service UserService qui dépend de UserRepository. Au lieu de créer le repository manuellement, nous utilisons Koin.

\n\n

É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                    

Recommendations