Middle+
Kuidas pakkuda erinevaid sama klassi instantsse Dagger Hiltis?
sobes.tech AI
Vastus AI-lt
Dagger Hilt võimaldab pakkuda erinevaid sama klassi instantsioone, kasutades kvalifikaatoreid (@Named või oma kohandatud).
-
Kvalifikaatorite loomine:
- Kasutage
@Namedlihtsate juhtude jaoks, määrates stringi nime. - Looge oma kohandatud annotatsioonide kvalifikaatoreid keerulisemate stsenaariumide või parema semantika jaoks.
// Näide kasutaja kvalifikaatorist @Qualifier @Retention(AnnotationRetention.RUNTIME) annotation class ProductionApi @Qualifier @Retention(AnnotationRetention.RUNTIME) annotation class TestApi - Kasutage
-
Erinevate instantside sidumine kvalifikaatorite abil:
- Modulites
Hilt(@Module), klassides@Providesvõi@Binds, kasutage kvalifikaatorite annotatsioone meetoditele, mis tagastavad instantsid.
@Module @InstallIn(SingletonComponent::class) // näide skoopist object AppModule { @Provides @Singleton // skoopi näide @Named("개발") // kvalifikaator @Named "Arendamiseks" fun provideDevRepository(): Repository { return Repository("Arendus keskkond") // erinev instants või konfiguratsioon } @Provides @Singleton // skoopi näide @Named("운영") // kvalifikaator @Named "Tootmiseks" fun provideProdRepository(): Repository { return Repository("Tootmise keskkond") // erinev instants või konfiguratsioon } // Kasutades kohandatud kvalifikaatoreid @Provides @Singleton @ProductionApi fun provideProductionService(): MyService { return MyService("Production API endpoint") } @Provides @Singleton @TestApi fun provideTestService(): MyService { return MyService("Test API endpoint") } } - Modulites
-
Spetsiifilise instantsi sisestamine:
- Kohtades, kus vaja sõltuvust sisestada (
@AndroidEntryPoint), märgistage väli või konstruktoriparameeter vastava kvalifikaatoriga.
@AndroidEntryPoint // Näiteks Fragment või Activity class MyFragment : Fragment() { @Inject @Named("개발") // Sisestame "Arendus" instantsi lateinit var devRepository: Repository @Inject @Named("운영") // Sisestame "Tootmise" instantsi lateinit var prodRepository: Repository @Inject @ProductionApi // Sisestame tootmise instantsi kohandatud kvalifikaatoriga lateinit var productionService: MyService // ... sõltuvuste kasutamine ... } - Kohtades, kus vaja sõltuvust sisestada (