Hilt/Dagger لـ Kotlin: دليل كامل مع أمثلة

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

مقدمة في حقن التبعيات ومكتبات Hilt/Dagger

\n\n

في تطوير التطبيقات الحديثة باستخدام Kotlin (خاصةً لنظام Android)، يُعد حقن التبعيات (Dependency Injection - DI) أحد المفاهيم المعمارية الأساسية. وهو نمط تصميم يحصل فيه الكائن على تبعياته من الخارج، بدلاً من إنشائها بنفسه. وهذا يجعل الكود أكثر مرونة، وقابلية للاختبار، وسهولة في الصيانة.

\n\n

Dagger هو إطار عمل قوي لحقن التبعيات، طورته Google، ويقوم بإنشاء الكود في مرحلة الترجمة. يضمن توفير جميع التبعيات بشكل صحيح، ويمنع أخطاء وقت التشغيل المرتبطة بغياب التبعيات. ومع ذلك، يتمتع Dagger بمنحنى تعلم حاد بسبب تعقيده.

\n\n

Hilt هو طبقة فوقية فوق Dagger، تم إنشاؤها لتبسيط استخدامه في تطبيقات Android. يوفر Hilt مكونات قياسية، وتعليقات توضيحية للنطاق، وتكاملاً تلقائياً مع دورة حياة Android (Activity، Fragment، ViewModel، إلخ). إذا كنت تكتب بلغة Kotlin لتطبيقات Android، فإن Hilt هو الخيار الموصى به، لأنه يقلل بشكل كبير من الكود النمطي (boilerplate).

\n\n

في هذه المقالة، سنستعرض بالتفصيل كلتا المكتبتين، لكننا سنركز بشكل أساسي على Hilt باعتبارها الأداة الأكثر حداثة وراحة. ستتعلم كيفية تثبيت Hilt، وكيفية استخدام تعليقاته التوضيحية وطرقه الأساسية، وسنحلل أمثلة واقعية وأخطاء شائعة.

\n\n

تثبيت Hilt في مشروع Kotlin/Android

\n\n

لا يتم تثبيت Hilt عبر pip أو npm. بل يتم دمجه في مشروع Gradle. بالنسبة لـ Kotlin وAndroid، تكون العملية كالتالي:

\n\n

1. إضافة إضافة Hilt في ملف build.gradle الجذر (على مستوى المشروع)

\n
// build.gradle (Project)\nbuildscript {\n    repositories {\n        google()\n        mavenCentral()\n    }\n    dependencies {\n        // ... إضافات أخرى\n        classpath 'com.google.dagger:hilt-android-gradle-plugin:2.50' // تحقق من الإصدار الأحدث\n    }\n}\n
\n\n

2. تطبيق الإضافة في ملف build.gradle لوحدة التطبيق (على مستوى الوحدة)

\n
// build.gradle (Module: app)\nplugins {\n    id 'com.android.application'\n    id 'org.jetbrains.kotlin.android'\n    id 'kotlin-kapt' // إلزامي لـ Hilt\n    id 'dagger.hilt.android.plugin'\n}\n\nandroid {\n    // ... إعداداتك\n}\n\ndependencies {\n    implementation 'com.google.dagger:hilt-android:2.50'\n    kapt 'com.google.dagger:hilt-compiler:2.50'\n\n    // لـ ViewModel (اختياري، لكن موصى به)\n    implementation 'androidx.hilt:hilt-navigation-compose:1.1.0' // لـ Jetpack Compose\n    // أو\n    implementation 'androidx.hilt:hilt-lifecycle-viewmodel:1.0.0-alpha03' // للإصدارات القديمة\n}\n
\n\n

3. إعداد فئة Application

\n

يجب أن يحتوي كل تطبيق يستخدم Hilt على فئة Application مُعلّقة بـ @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        // تهيئة التطبيق\n    }\n}\n
\n

لا تنسَ تحديد هذه الفئة في ملف AndroidManifest.xml:

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

بداية سريعة مع مثال كود

\n\n

لنقم بإنشاء مثال بسيط: تطبيق يُحيي المستخدم، باستخدام Hilt لحقن تبعية Greeter.

\n\n

الخطوة 1: إنشاء الفئة التي سيتم حقنها

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

التعليق التوضيحي @Inject على المُنشئ يُخبر Hilt بكيفية إنشاء نسخة من هذه الفئة.

\n\n

الخطوة 2: الحقن في Activity

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

توصيات