Sobes.tech
Middle+

Ինչպես տրամադրել նույն դասի տարբեր ինստանցիաներ Dagger Hilt-ում։

sobes.tech AI

Պատասխան AI-ից

Dagger Hilt- ում նույն դասի տարբեր ինстанցիաներ տրամադրելու համար դուք կարող եք օգտագործել որակիչներ (@Named կամ ձեր անհատականացված):

  1. Որակիչներ ստեղծել:

    • Օգտագործեք @Named պարզ դեպքերում, նշելով տողային անուն:
    • Ստեղծեք ձեր անհատականացված նշումներ-որակիչներ ավելի բարդ սցենարների կամ ավելի լավ սիմանտիկայի համար:
    // Օգտագործողի օրինակային որակիչ
    @Qualifier
    @Retention(AnnotationRetention.RUNTIME)
    annotation class ProductionApi
    
    @Qualifier
    @Retention(AnnotationRetention.RUNTIME)
    annotation class TestApi
    
  2. Տարբեր ինстанցիաներ կապել որակիչների միջոցով:

    • Hilt մոդուլներում (@Module), @Provides կամ @Binds դասարանների ներսում, օգտագործեք որակիչ նշումներ մեթոդների համար, որոնք վերադարձնում են ինстанցիաներ:
    @Module
    @InstallIn(SingletonComponent::class) // օրինակ սփոու
    object AppModule {
    
        @Provides
        @Singleton // սփոու օրինակ
        @Named("개발") // @Named որակիչ՝ "Դեպի զարգացման"
        fun provideDevRepository(): Repository {
            return Repository("개발 միջավայր") // տարբեր ինстанցիա կամ կոնֆիգուրացիա
        }
    
        @Provides
        @Singleton // սփոու օրինակ
        @Named("운영") // @Named որակիչ՝ "Դեպի արտադրություն"
        fun provideProdRepository(): Repository {
            return Repository("운영 միջավայր") // տարբեր ինстанցիա կամ կոնֆիգուրացիա
        }
    
        // Անհատականացված որակիչների օգտագործում
        @Provides
        @Singleton
        @ProductionApi
        fun provideProductionService(): MyService {
            return MyService("Production API endpoint")
        }
    
        @Provides
        @Singleton
        @TestApi
        fun provideTestService(): MyService {
            return MyService("Test API endpoint")
        }
    }
    
  3. Սպասարկվող հատուկ ինстанցիայի ներդնում:

    • Այն վայրերում, որտեղ անհրաժեշտ է ներդնել կախվածություն (@AndroidEntryPoint), նշեք դաշտը կամ կոնստրուկտորի պարամետրը համապատասխան որակիչով:
    @AndroidEntryPoint // Օրինակ, Fragment կամ Activity
    class MyFragment : Fragment() {
    
        @Inject
        @Named("개발") // Ինստանցիա "Դեպի զարգացման"
        lateinit var devRepository: Repository
    
        @Inject
        @Named("운영") // Ինստանցիա "Դեպի արտադրություն"
        lateinit var prodRepository: Repository
    
        @Inject
        @ProductionApi // Ինստանցիա արտադրության համար՝ անհատականացված որակիչով
        lateinit var productionService: MyService
    
        // ... օգտագործում կախվածությունները ...
    }