آموزش Dagger Hilt – راهنمای گام به گام

Dagger Hilt یک ابزار وابستگیگذاری (Dependency Injection) برای برنامههای اندرویدی است که توسط گوگل توسعه یافته است. این ابزار بر پایهی Dagger ساخته شده و کار را برای توسعهدهندگان سادهتر میکند. در این راهنمای گامبهگام، نحوهی استفاده از Dagger Hilt را بررسی خواهیم کرد.
اما برای راه اندازی و کار با Dagger نیاز به مقدار زیادی کد boilerpalte (نوشتن کدهایی ک باعث میشه حجم کد بره بالا) و منحنی یادگیری بسیار شیب دار داریم . سپس Dagger-Android آمد که کد boilerpalte را کاهش دهد، اما موفق نشد.
در حال حاضر، اکنون راه پیشنهادی گوگل ، انتشار Dagger-Hilt به عنوان بخشی از کتابخانه های Jetpack برای استفاده از آن است. در Dagger-Hilt :
- کد dagger برای توسعه دهندگان آسان و ساده شود.
- ارائه مجموعه ای متفاوت از اتصالات) binding (برای انواع build type ها.
- مراقبت از محل تزریق وابستگیها و باقی ماندن همه code generation توسط خود dagger با استفاده از annotation ها و در نتیجه حذف همه کدهای boilerpalte اتفاق میافتد.
در این آموزش می آموزیم:
- درک dagger
- راه اندازی یک پروژه جدید
- ساختار پروژه
- ادغام Dagger-Hilt
- WorkManager با Dagger-Hilt
- Qualifier ها
چرا از Dagger Hilt استفاده کنیم؟
- مدیریت وابستگیها در پروژههای اندروید را سادهتر میکند.
- نیازی به تنظیمات پیچیده Dagger ندارد.
- چرخهی حیات کامپوننتهای اندروید را بهصورت خودکار مدیریت میکند.
- توسط Google پشتیبانی میشود و برای کار با Jetpack و سایر کتابخانههای اندروید بهینه شده است.
شناخت Dagger
قبل از شروع با Dagger-Hilt باید اصول اولیه Dagger را بدانیم. در این مقاله به شما کمک می کنیم تا Dagger و اصطلاحات آن را بشناسید.
اساساً برای شناخت Dagger باید چهار annotation اصلی را بشناسیم.
- Module
- Component
- Provides
- Inject
برای درک بهتر آن ، Module را به عنوان یک فراهم کننده(provider) وابستگی در نظر بگیرید و یک activity یا هر class دیگری را به عنوان مصرف کننده(consumer) در نظر بگیرید. اکنون برای ایجاد وابستگی از provider به consumer ، پلی بین آنها داریم، در Dagger، Component به عنوان آن پل خاص کار میکند.
در چنین حالتی، یک Module یک کلاس است و ما آن را با @Module برای Dagger حاشیه نویسی می کنیم تا آن را به عنوان Module (واحد مستقل) درک کنیم.
یک component یک interface است که با @Component حاشیه نویسی می شود و Module ها را در آن جا می گیرد. (اما اکنون، این annotation در Dagger-Hilt مورد نیاز نیست)
Provide ها یک annotation در کلاس Module برای فراهم کردن وابستگی هستند و
Inject یک annotation برای تعریف وابستگی در داخل مصرف کننده(consumer) استفاده می شود.

به شدت توصیه می شود قبل از مهاجرت به سمت Dagger-Hilt در مورد Dagger خام(raw)، بدانید.
افزودن Dagger Hilt به پروژه
مرحله ۱: اضافه کردن وابستگیها
ابتدا build.gradle
سطح پروژه را باز کرده و پلاگین Hilt را اضافه کنید:
plugins {
id 'com.android.application'
id 'org.jetbrains.kotlin.android'
id 'dagger.hilt.android.plugin'
}
سپس در build.gradle
ماژول app وابستگیهای زیر را اضافه کنید:
dependencies {
implementation "com.google.dagger:hilt-android:2.50"
kapt "com.google.dagger:hilt-android-compiler:2.50"
}
همچنین افزونهی kapt
را فعال کنید:
plugins {
id 'kotlin-kapt'
}
پیکربندی اولیه Hilt در پروژه
مرحله ۲: اضافه کردن Hilt به کلاس Application
برای فعالسازی Hilt، باید کلاس Application
خود را تغییر داده و از @HiltAndroidApp
استفاده کنید:
@HiltAndroidApp
class MyApplication : Application()
تعریف وابستگیها در Hilt
مرحله ۳: ایجاد یک ماژول Hilt
برای تعریف وابستگیها، یک کلاس ماژول ایجاد کنید. ماژولها در Hilt با @Module
و @InstallIn
مشخص میشوند.
@Module
@InstallIn(SingletonComponent::class)
object AppModule {
@Provides
@Singleton
fun provideRetrofit(): Retrofit {
return Retrofit.Builder()
.baseUrl("https://api.amooznegar.com")
.addConverterFactory(GsonConverterFactory.create())
.build()
}
@Provides
fun provideApiService(retrofit: Retrofit): ApiService {
return retrofit.create(ApiService::class.java)
}
}
✅ این ماژول یک نمونه Retrofit
و ApiService
را برای وابستگیگذاری فراهم میکند.
استفاده از Hilt در اکتیویتیها و فرگمنتها
مرحله ۴: مقداردهی وابستگیها با Hilt
در اکتیویتیها و فرگمنتها از @AndroidEntryPoint استفاده کنید:
@AndroidEntryPoint
class MainActivity : AppCompatActivity() {
@Inject
lateinit var apiService: ApiService
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
// حالا میتوانید از apiService استفاده کنید
}
}
وابستگیهای سطح ViewModel
Hilt بهراحتی از ViewModel نیز پشتیبانی میکند. کافی است کلاس ViewModel را با @HiltViewModel
مشخص کرده و وابستگیهای موردنیاز را در سازندهی آن مقداردهی کنید:
@HiltViewModel
class MainViewModel @Inject constructor(
private val apiService: ApiService
) : ViewModel() {
fun fetchData() {
// استفاده از apiService برای دریافت دادهها
}
}
و سپس در اکتیویتی:
@AndroidEntryPoint
class MainActivity : AppCompatActivity() {
private val viewModel: MainViewModel by viewModels()
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
viewModel.fetchData()
}
}
نتیجهگیری
با استفاده از Dagger Hilt، وابستگیها در برنامه نویسی اندروید بهصورت بهینه، خوانا و ساده مدیریت میشوند. این ابزار جایگزین بهتری نسبت به Dagger خام است و میتواند در پروژههای مدرن اندرویدی بسیار مفید باشد.
🚀 حالا شما آمادهاید که Hilt را در پروژهی خود پیادهسازی کنید!
دیدگاهتان را بنویسید