Hilt/Dagger für Kotlin: Vollständiger Leitfaden mit Beispielen

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

Einführung in Dependency Injection und die Bibliotheken Hilt/Dagger

\n\n

In der modernen App-Entwicklung mit Kotlin (insbesondere für Android) ist Dependency Injection (DI) – die Abhängigkeitsinjektion – eines der zentralen Architekturkonzepte. Es handelt sich um ein Entwurfsmuster, bei dem ein Objekt seine Abhängigkeiten von außen erhält, anstatt sie selbst zu erstellen. Dies macht den Code flexibler, testbarer und wartbarer.

\n\n

Dagger ist ein leistungsstarkes DI-Framework, das von Google entwickelt wurde und Code zur Kompilierungszeit generiert. Es stellt sicher, dass alle Abhängigkeiten korrekt bereitgestellt werden, und vermeidet Laufzeitfehler, die durch fehlende Abhängigkeiten entstehen. Allerdings hat Dagger aufgrund seiner Komplexität eine steile Lernkurve.

\n\n

Hilt ist ein Aufsatz auf Dagger, der entwickelt wurde, um dessen Verwendung in Android-Apps zu vereinfachen. Hilt bietet standardisierte Komponenten, Scope-Annotationen und eine automatische Integration mit dem Android-Lebenszyklus (Activity, Fragment, ViewModel usw.). Wenn Sie Kotlin für Android schreiben, ist Hilt die empfohlene Wahl, da es den Boilerplate-Code erheblich reduziert.

\n\n

In diesem Artikel werden wir beide Bibliotheken im Detail betrachten, den Schwerpunkt jedoch auf Hilt als das modernere und benutzerfreundlichere Werkzeug legen. Sie erfahren, wie Sie Hilt installieren, seine wichtigsten Annotationen und Methoden verwenden und analysieren reale Beispiele sowie typische Fehler.

\n\n

Installation von Hilt in einem Kotlin/Android-Projekt

\n\n

Hilt wird nicht über pip oder npm installiert. Es wird in ein Gradle-Projekt integriert. Für Kotlin und Android sieht der Prozess wie folgt aus:

\n\n

1. Hinzufügen des Hilt-Plugins zur build.gradle auf Projektebene (Project-level)

\n
// build.gradle (Project)\nbuildscript {\n    repositories {\n        google()\n        mavenCentral()\n    }\n    dependencies {\n        // ... andere Plugins\n        classpath 'com.google.dagger:hilt-android-gradle-plugin:2.50' // Prüfen Sie die aktuelle Version\n    }\n}\n
\n\n

2. Anwenden des Plugins in der build.gradle des App-Moduls (Module-level)

\n
// build.gradle (Module: app)\nplugins {\n    id 'com.android.application'\n    id 'org.jetbrains.kotlin.android'\n    id 'kotlin-kapt' // Erforderlich für Hilt\n    id 'dagger.hilt.android.plugin'\n}\n\nandroid {\n    // ... Ihre Konfiguration\n}\n\ndependencies {\n    implementation 'com.google.dagger:hilt-android:2.50'\n    kapt 'com.google.dagger:hilt-compiler:2.50'\n\n    // Für ViewModel (optional, aber empfohlen)\n    implementation 'androidx.hilt:hilt-navigation-compose:1.1.0' // Für Jetpack Compose\n    // oder\n    implementation 'androidx.hilt:hilt-lifecycle-viewmodel:1.0.0-alpha03' // Für ältere Versionen\n}\n
\n\n

3. Konfiguration der Application-Klasse

\n

Jede App, die Hilt verwendet, muss eine Application-Klasse haben, die mit @HiltAndroidApp annotiert ist.

\n
import android.app.Application\nimport dagger.hilt.android.HiltAndroidApp\n\n@HiltAndroidApp\nclass MyApplication : Application() {\n    override fun onCreate() {\n        super.onCreate()\n        // App-Initialisierung\n    }\n}\n
\n

Vergessen Sie nicht, diese Klasse in der AndroidManifest.xml anzugeben:

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

Schnellstart mit einem Codebeispiel

\n\n

Erstellen wir ein einfaches Beispiel: eine App, die den Benutzer begrüßt, indem sie die Abhängigkeit Greeter mit Hilt injiziert.

\n\n

Schritt 1: Erstellen Sie die Klasse, die injiziert werden soll

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

Die Annotation @Inject am Konstruktor teilt Hilt mit, wie eine Instanz dieser Klasse erstellt wird.

\n\n

Schritt 2: Injektion in eine Activity

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

Empfehlungen