Middle+
Hoe geef je verschillende instanties van dezelfde klasse in Dagger Hilt?
sobes.tech AI
Antwoord van AI
Om verschillende instanties van dezelfde klasse in Dagger Hilt te leveren, kun je kwalificaties gebruiken (@Named of aangepaste).
-
Aanmaken van kwalificaties:
- Gebruik
@Namedvoor eenvoudige gevallen, met een stringnaam. - Maak je eigen aangepaste kwalificatie-annotaties voor complexere scenario's of betere semantiek.
// Voorbeeld van een aangepaste kwalificatie @Qualifier @Retention(AnnotationRetention.RUNTIME) annotation class ProductionApi @Qualifier @Retention(AnnotationRetention.RUNTIME) annotation class TestApi - Gebruik
-
Koppelen van verschillende instanties met kwalificaties:
- In modules
Hilt(@Module), binnen klassen met@Providesof@Binds, gebruik kwalificatie-annotaties voor methoden die instanties teruggeven.
@Module @InstallIn(SingletonComponent::class) // Voorbeeld scope object AppModule { @Provides @Singleton // Voorbeeld scope @Named("개발") // Kwalificatie @Named voor de instantie "Voor ontwikkeling" fun provideDevRepository(): Repository { return Repository("Ontwikkelomgeving") // Verschillende instantie of configuratie } @Provides @Singleton // Voorbeeld scope @Named("운영") // Kwalificatie @Named voor de instantie "Voor productie" fun provideProdRepository(): Repository { return Repository("Productieomgeving") // Verschillende instantie of configuratie } // Gebruik van aangepaste kwalificaties @Provides @Singleton @ProductionApi fun provideProductionService(): MyService { return MyService("Productie API endpoint") } @Provides @Singleton @TestApi fun provideTestService(): MyService { return MyService("Test API endpoint") } } - In modules
-
Injectie van een specifieke instantie:
- Op plaatsen waar je afhankelijkheid moet injecteren (
@AndroidEntryPoint), annoteer het veld of de constructorparameter met de juiste kwalificator.
@AndroidEntryPoint // Bijvoorbeeld, Fragment of Activity class MyFragment : Fragment() { @Inject @Named("개발") // Injecteer de "Voor ontwikkeling" instantie lateinit var devRepository: Repository @Inject @Named("운영") // Injecteer de "Voor productie" instantie lateinit var prodRepository: Repository @Inject @ProductionApi // Injecteer de instantie voor productie met aangepaste kwalificator lateinit var productionService: MyService // ... gebruik van afhankelijkheden ... } - Op plaatsen waar je afhankelijkheid moet injecteren (