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، کدنویسی اندرویدتون خیلی حرفهایتر و لذتبخشتر میشه. این کتابخونه، کار مدیریت وابستگیها رو براتون آسون میکنه و اجازه میده روی منطق اصلی برنامه تمرکز کنید. برای درک بهتر آموزش می تونید ویدیو آموزشیمون رو ببینید.


دیدگاهتان را بنویسید