Blog top image

Dependency Injection


Hilt হচ্ছে মূলত অ্যানড্রয়েড অ্যাপ্লিকেশন এ ডিপেন্ডেন্সি ইনজেকশন ফ্রেমওয়ার্ক। Dagger নামক লাইব্রেরির উপর Hilt ফ্রেমওয়ার্ক কাজ করে। 

যখন @HiltAndroidApp এনোটেশন অ্যাপ্লিকেশনে ব্যবহার করা হয়, তখন

- Hilt ফ্রেমওয়ার্ক অ্যাপ্লিকেশন ডিপেন্ডেন্সি ইনজেকশন এর জন্য রেডি করে

- Hilt তলে তলে Dagger কম্পোনেন্ট এবং মডিউল তৈরি করে ফেলে 


Hilt কে অ্যাপ্লিকেশন এ যুক্ত করতে নিচের কাজ করতে হয় 


১।টপ লেভেল build.gradle.kts এ প্লাগিন যুক্ত করা 

plugins {
    ......
    id("com.google.dagger.hilt.android") version "2.50" apply false
}



২। মডিউল লেভেল build.gradle.kts এ প্লাগিন নিচের  যুক্ত করা 

plugins {
    .....
   id("dagger.hilt.android.plugin")
    kotlin("kapt")
}


৩। মডিউল লেভেল build.gradle.kts এ Hilt এর ডিপেন্ডেন্সি যুক্ত করা 

dependencies {
    .........  
    kapt("com.google.dagger:hilt-compiler:2.50")
    implementation("com.google.dagger:hilt-android:2.50")
    implementation("androidx.hilt:hilt-navigation-compose:1.2.0")
}


৪। মডিউল লেভেল build.gradle.kts এ Kapt ব্লক যুক্ত করা

kapt {
    correctErrorTypes = true
}


৫। একটা ক্লাসে @HiltAndroidApp যুক্ত করা 

@HiltAndroidApp
class MemoryApp : Application()


৬। MainActivity ক্লাসে @AndroidEntryPoint যুক্ত করা 

@AndroidEntryPoint
class MainActivity : ComponentActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContent {
            MemoryUI()
        }
    }
}


৭। DependencyConfig তৈরি করা 

@Module
@InstallIn(SingletonComponent::class)
class ApiConfig {

    ........

    @Provides
    @Singleton
    fun provideReminderService(retrofit: Retrofit): ReminderApi =
        retrofit.create(ReminderApi::class.java)

    ......

}
 

৮। ফাইনালি @Inject ব্যবহার করে ডিপেন্ডেন্সি ইনজেক্ট করা 


রিপোজিটরিতে API কে ইনজেক্ট করা 

class ReminderRepository @Inject constructor(
  private val reminderApi: ReminderApi
) {
    .....
}


ViewModel এ Repository ইনজেক্ট করা 

@HiltViewModel
class ReminderViewModel @Inject constructor(
    private val reminderRepository: ReminderRepository
) : ViewModel() {
    ......
}