hilt! تا حالا شده توی پروژههاتون از حجم زیاد کد و شلوغی برای مدیریت وابستگیها خسته بشین؟ مثلاً بخواین یک ViewModel
رو به Repository
و اون رو به دیتابیس Room
وصل کنین و ببینید چقدر کد تکراری باید بنویسید؟
اینجاست که Hilt میاد وسط و کار رو برای همه آسون میکنه! Hilt یه کتابخونه از طرف گوگل برای تزریق وابستگی (Dependency Injection) توی اندرویده که روی Dagger ساخته شده.
اینجا میخوایم قدم به قدم ببینیم چطور میشه Hilt رو توی یه پروژه اندروید با Kotlin و Jetpack Compose پیادهسازی کرد و یه کد تمیز و مرتب نوشت. توجه کنید که این آموزش در ادامه آموزش پیادهسازی Room در پروژه های کامپوز اندروید هست.
چرا Hilt؟
- کد کمتر، کار بیشتر: Hilt کلی از کدهای تکراری رو حذف میکنه.
- کد تمیز و قابل فهم: وقتی وابستگیها رو جدا میکنید، کدتون مثل یه کتاب مرتب میشه و راحت میتونید بخونید و تغییرش بدید.
- مدیریت هوشمند: Hilt خودش حواسش به چرخه حیات کامپوننتها (مثل
Activity
یاViewModel
) هست و آبجکتها رو درست سر جای خودشون میسازه. مثلاً با@Singleton
تضمین میکنه که از یه آبجکت مهم (مثل دیتابیس) فقط یه دونه توی کل برنامه ساخته بشه. - تستنویسی راحت: وقتی وابستگیها تزریق میشن، تستنویسی خیلی راحتتر میشه، چون میتونید به جای آبجکت اصلی، نسخههای تستی (Mock) رو به کدتون بدید.
چطور Hilt رو به پروژهمون اضافه کنیم؟
برای پیادهسازی Hilt، این مراحل ساده رو دنبال کنید. این روش دقیقاً مثل همون چیزیه که توی مستندات رسمی گوگل گفته شده.
قدم اول: وابستگیها رو اضافه کن
اول باید پلاگین و کتابخونههای Hilt رو به فایلهای build.gradle.kts
پروژهتون اضافه کنید.
فایل build.gradle.kts (پروژه):

این خط رو به پلاگینها اضافه کنید:
plugins {
...
id("com.google.dagger.hilt.android") version "2.56.2" apply false
}
نکته: همیشه سعی کنید از آخرین ورژن Hilt استفاده کنید. اینطوری از قابلیتهای جدید و رفع باگها بهرهمند میشید.
فایل build.gradle.kts (ماژول):
کتابخونههای مورد نیاز رو اینجا بذارید:

plugins {
...
id("com.google.devtools.ksp")
id("com.google.dagger.hilt.android")
}
dependencies {
implementation("com.google.dagger:hilt-android:2.56.2")
ksp("com.google.dagger:hilt-android-compiler:2.56.2")
implementation("androidx.hilt:hilt-navigation-compose:1.2.0")
...
}
قدم دوم: کلاس Application رو بساز

Hilt برای اینکه از همون اول کار رو شروع کنه، به یه کلاس Application
نیاز داره.
- یه کلاس جدید بسازید که از
Application
ارث میبره. - بالای کلاس
@HiltAndroidApp
رو بذارید.
import android.app.Application
import dagger.hilt.android.HiltAndroidApp
@HiltAndroidApp
class App : Application() { }
- بعدش اسم این کلاس رو توی فایل
AndroidManifest.xml
معرفی کنید.
<application
android:name=".App"
... >
</application>
قدم سوم: Activity
رو علامتگذاری کن
کافیه بالای MainActivity
، انوتیشن @AndroidEntryPoint
رو بذارید تا Hilt بدونه که باید وابستگیها رو اینجا تزریق کنه.
Kotlin
@AndroidEntryPoint
class MainActivity : ComponentActivity() {
// ...
}
بزن بریم سراغ Repository Pattern و ViewModel
برای اینکه کدتون حرفهای و تمیز باشه، از الگوی Repository استفاده میکنیم.
قدم چهارم: Repository رو بساز
یه کلاس Repository
(مثلاً UserRepository
) بسازید. این کلاس مسئول ارتباط با دیتابیس Room هست.

class UserRepository @Inject constructor(private val userDao: UserDao) {
suspend fun getUser(email: String, pass: String): User? {
return userDao.getUser(email, pass)
}
}
اینجا userDao
به عنوان یک وابستگی با استفاده از @Inject
به کلاس تزریق میشه.
قدم پنجم: وابستگیها رو به ViewModel تزریق کن
ViewModel
مرکز اصلی منطق UI و دادههاست.
ViewModel
رو با انوتیشن@HiltViewModel
مشخص کنید.- وابستگی مورد نیاز (اینجا
UserRepository
) رو با@Inject
توی کانستراکتورش تزریق کنید.

@HiltViewModel
class LoginScreenVM @Inject constructor(private val userRepository: userRepository) : ViewModel() {
// ...
}
اینطوری Hilt خودش یه نمونه از UserRepository
میسازه و به MyViewModel
میده، بدون اینکه شما درگیر جزئیاتش بشین.
ماژولهای Hilt: راه حل تزریق وابستگی!
Hilt نمیدونه چطور باید کلاسهایی که از کتابخانههای خارجی میان (مثل دیتابیس Room) رو بسازه. اینجا باید ماژولها رو بهش معرفی کنیم.
- یه
object
بسازید و بهش@Module
و@InstallIn(SingletonComponent::class)
بدید. - حالا با استفاده از توابع و انوتیشن
@Provides
به Hilt یاد بدید چطور نمونههای مورد نیاز رو بسازه.

import android.content.Context
import androidx.room.Room
import com.esfandune.esfadnune_v1.database.AppDatabase
import dagger.Module
import dagger.Provides
import dagger.hilt.InstallIn
import dagger.hilt.android.qualifiers.ApplicationContext
import dagger.hilt.components.SingletonComponent
import javax.inject.Singleton
@Module
@InstallIn(SingletonComponent::class)
object AppModule {
@Provides
@Singleton
fun provideAppDatabase(@ApplicationContext context: Context): AppDatabase {
return Room.databaseBuilder(
context,
AppDatabase::class.java,
"app_database"
).build()
}
@Provides
@Singleton
fun provideUserDao(appDatabase: AppDatabase) = appDatabase.userDAO()
}
نکته اسفندونه: SingletonComponent
باعث میشه که این وابستگیها توی کل طول عمر برنامه قابل دسترسی باشن که برای آبجکتهایی مثل دیتابیس که فقط یه نمونه ازشون لازمه، خیلی عالیه.
قدم ششم: ViewModel رو توی Jetpack Compose استفاده کن
به جای استفاده از viewModel()
معمولی، برای ViewModel
های Hilt باید از hiltViewModel()
استفاده کنید.
Kotlin
@Composable
fun MyScreen(
viewModel: MyViewModel = hiltViewModel()
) {
// ...
}
نتیجهگیری
با پیادهسازی Hilt، کدنویسی اندرویدتون خیلی حرفهایتر و لذتبخشتر میشه. این کتابخونه، کار مدیریت وابستگیها رو براتون آسون میکنه و اجازه میده روی منطق اصلی برنامه تمرکز کنید. برای درک بهتر آموزش می تونید ویدیو آموزشیمون رو ببینید.
دیدگاهتان را بنویسید