Middle+
Dagger Hilt-də eyni sinifin müxtəlif instansiyalarını necə təmin etmək olar?
sobes.tech Süni İntellekt
AI-dan cavab
Dagger Hilt-də eyni sinfinin müxtəlif instansiyalarını təmin etmək üçün kvalifikatorlardan (@Named və ya xüsusi olanlar) istifadə edə bilərsiniz.
-
Kvalifikatorların yaradılması:
- Sadə hallarda
@Namedistifadə edin və sətir adını göstərin. - Daha mürəkkəb ssenarilər və ya daha yaxşı semantika üçün öz xüsusi kvalifikator annotasiyalarınızı yaradın.
// Xüsusi kvalifikator nümunəsi @Qualifier @Retention(AnnotationRetention.RUNTIME) annotation class ProductionApi @Qualifier @Retention(AnnotationRetention.RUNTIME) annotation class TestApi - Sadə hallarda
-
Kvalifikatorlar ilə müxtəlif instansiyaların bağlanması:
Hiltmodullarda (@Module),@Providesvə ya@Bindsilə siniflər daxilində, metodlar üçün kvalifikator annotasiyalarından istifadə edin.
@Module @InstallIn(SingletonComponent::class) // Nümunə scope object AppModule { @Provides @Singleton // Scope nümunəsi @Named("개발") // "İnkişaf üçün" instansiya üçün @Named kvalifikatoru fun provideDevRepository(): Repository { return Repository("İnkişaf mühiti") // Fərqli instansiya və ya konfiqurasiya } @Provides @Singleton // Scope nümunəsi @Named("운영") // "İstehsal üçün" instansiya üçün @Named kvalifikatoru fun provideProdRepository(): Repository { return Repository("İstehsal mühiti") // Fərqli instansiya və ya konfiqurasiya } // Xüsusi kvalifikatorların istifadəsi @Provides @Singleton @ProductionApi fun provideProductionService(): MyService { return MyService("İstehsal API endpoint") } @Provides @Singleton @TestApi fun provideTestService(): MyService { return MyService("Test API endpoint") } } -
Xüsusi instansiyanın injeksiyası:
- Zəruri yerlərdə (
@AndroidEntryPoint) asılılığı injekt etmək üçün, sahəni və ya konstruktor parametrini uyğun kvalifikator ilə annotasiya edin.
@AndroidEntryPoint // Məsələn, Fragment və ya Activity class MyFragment : Fragment() { @Inject @Named("개발") // "İnkişaf üçün" instansiyanı injekt edir lateinit var devRepository: Repository @Inject @Named("운영") // "İstehsal üçün" instansiyanı injekt edir lateinit var prodRepository: Repository @Inject @ProductionApi // Xüsusi kvalifikator ilə istehsal üçün instansiyanı injekt edir lateinit var productionService: MyService // ... asılılıqlardan istifadə ... } - Zəruri yerlərdə (