Hilt/Dagger 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 à l'injection de dépendances et aux bibliothèques Hilt/Dagger

\n\n

Dans le développement moderne d'applications en Kotlin (notamment pour Android), l'un des concepts architecturaux clés est Dependency Injection (DI) — l'injection de dépendances. Il s'agit d'un modèle de conception dans lequel un objet reçoit ses dépendances de l'extérieur, plutôt que de les créer lui-même. Cela rend le code plus flexible, testable et maintenable.

\n\n

Dagger est un framework DI puissant développé par Google, qui génère du code à la compilation. Il garantit que toutes les dépendances seront fournies correctement et élimine les erreurs d'exécution liées à l'absence de dépendances. Cependant, Dagger a une courbe d'apprentissage abrupte en raison de sa complexité.

\n\n

Hilt est une surcouche de Dagger, conçue pour simplifier son utilisation dans les applications Android. Hilt fournit des composants standards, des annotations de scope et une intégration automatique avec le cycle de vie Android (Activity, Fragment, ViewModel, etc.). Si vous développez en Kotlin pour Android, Hilt est le choix recommandé car il réduit considérablement le code boilerplate.

\n\n

Dans cet article, nous examinerons en détail les deux bibliothèques, mais nous nous concentrerons principalement sur Hilt, en tant qu'outil plus moderne et pratique. Vous apprendrez comment installer Hilt, comment utiliser ses annotations et méthodes principales, et nous analyserons des exemples concrets ainsi que les erreurs typiques.

\n\n

Installation de Hilt dans un projet Kotlin/Android

\n\n

Hilt ne s'installe pas via pip ou npm. Il s'intègre dans un projet Gradle. Pour Kotlin et Android, le processus est le suivant :

\n\n

1. Ajout du plugin Hilt dans le build.gradle racine (Project-level)

\n
// build.gradle (Project)\nbuildscript {\n    repositories {\n        google()\n        mavenCentral()\n    }\n    dependencies {\n        // ... autres plugins\n        classpath 'com.google.dagger:hilt-android-gradle-plugin:2.50' // Vérifiez la version actuelle\n    }\n}\n
\n\n

2. Application du plugin dans le build.gradle du module de l'application (Module-level)

\n
// build.gradle (Module: app)\nplugins {\n    id 'com.android.application'\n    id 'org.jetbrains.kotlin.android'\n    id 'kotlin-kapt' // Obligatoire pour Hilt\n    id 'dagger.hilt.android.plugin'\n}\n\nandroid {\n    // ... votre configuration\n}\n\ndependencies {\n    implementation 'com.google.dagger:hilt-android:2.50'\n    kapt 'com.google.dagger:hilt-compiler:2.50'\n\n    // Pour ViewModel (optionnel, mais recommandé)\n    implementation 'androidx.hilt:hilt-navigation-compose:1.1.0' // Pour Jetpack Compose\n    // ou\n    implementation 'androidx.hilt:hilt-lifecycle-viewmodel:1.0.0-alpha03' // Pour les anciennes versions\n}\n
\n\n

3. Configuration de la classe Application

\n

Chaque application utilisant Hilt doit avoir une classe Application annotée avec @HiltAndroidApp.

\n
import android.app.Application\nimport dagger.hilt.android.HiltAndroidApp\n\n@HiltAndroidApp\nclass MyApplication : Application() {\n    override fun onCreate() {\n        super.onCreate()\n        // Initialisation de l'application\n    }\n}\n
\n

N'oubliez pas d'indiquer cette classe dans AndroidManifest.xml :

\n
<application\n    android:name=".MyApplication"\n    ... >\n
\n\n

Démarrage rapide avec un exemple de code

\n\n

Créons un exemple simple : une application qui salue l'utilisateur, en utilisant Hilt pour injecter la dépendance Greeter.

\n\n

Étape 1 : Créez la classe qui sera injectée

\n
import javax.inject.Inject\n\nclass Greeter @Inject constructor() {\n    fun greet(name: String): String {\n        return "Bonjour, $name!"\n    }\n}\n
\n

L'annotation @Inject sur le constructeur indique à Hilt comment créer une instance de cette classe.

\n\n

Étape 2 : Injection dans une Activity

\n
import android.os.Bundle\nimport android.widge                    

Recommendations