Middle+
Ինչպես տրամադրել նույն դասի տարբեր ինստանցիաներ Dagger Hilt-ում։
sobes.tech AI
Պատասխան AI-ից
Dagger Hilt- ում նույն դասի տարբեր ինстанցիաներ տրամադրելու համար դուք կարող եք օգտագործել որակիչներ (@Named կամ ձեր անհատականացված):
-
Որակիչներ ստեղծել:
- Օգտագործեք
@Namedպարզ դեպքերում, նշելով տողային անուն: - Ստեղծեք ձեր անհատականացված նշումներ-որակիչներ ավելի բարդ սցենարների կամ ավելի լավ սիմանտիկայի համար:
// Օգտագործողի օրինակային որակիչ @Qualifier @Retention(AnnotationRetention.RUNTIME) annotation class ProductionApi @Qualifier @Retention(AnnotationRetention.RUNTIME) annotation class TestApi - Օգտագործեք
-
Տարբեր ինстанցիաներ կապել որակիչների միջոցով:
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") } } -
Սպասարկվող հատուկ ինстанցիայի ներդնում:
- Այն վայրերում, որտեղ անհրաժեշտ է ներդնել կախվածություն (
@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 // ... օգտագործում կախվածությունները ... } - Այն վայրերում, որտեղ անհրաժեշտ է ներդնել կախվածություն (