Sobes.tech
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.

  1. Kvalifikatorların yaradılması:

    • Sadə hallarda @Named istifadə 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
    
  2. Kvalifikatorlar ilə müxtəlif instansiyaların bağlanması:

    • Hilt modullarda (@Module), @Provides və ya @Binds ilə 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")
        }
    }
    
  3. 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ə ...
    }