Middle+
Ako poskytnúť rôzne inštancie toho istého triedy v Dagger Hilt?
sobes.tech AI
Odpoveď od AI
Pre poskytovania rôznych inštancií toho istého triedy v Dagger Hilt môžete použiť kvalifikátory (@Named alebo vlastné).
-
Vytváranie kvalifikátorov:
- Použite
@Namedpre jednoduché prípady, uvádzaním reťazcového mena. - Vytvárajte vlastné anotácie-kvalifikátory pre zložitejšie scenáre alebo lepšiu sémantiku.
// Príklad vlastného kvalifikátora @Qualifier @Retention(AnnotationRetention.RUNTIME) annotation class ProductionApi @Qualifier @Retention(AnnotationRetention.RUNTIME) annotation class TestApi - Použite
-
Pripájanie rôznych inštancií pomocou kvalifikátorov:
- V moduloch
Hilt(@Module), vo vnútri tried s@Providesalebo@Binds, používajte anotácie-kvalifikátory pre metódy, ktoré vracajú inštancie.
@Module @InstallIn(SingletonComponent::class) // príklad scope object AppModule { @Provides @Singleton // príklad scope @Named("개발") // kvalifikátor @Named pre inštanciu "Pre vývoj" fun provideDevRepository(): Repository { return Repository("개발环境") // rôzna inštancia alebo konfigurácia } @Provides @Singleton // príklad scope @Named("운영") // kvalifikátor @Named pre inštanciu "Pre produkciu" fun provideProdRepository(): Repository { return Repository("운영环境") // rôzna inštancia alebo konfigurácia } // Použitie vlastných kvalifikátorov @Provides @Singleton @ProductionApi fun provideProductionService(): MyService { return MyService("Production API endpoint") } @Provides @Singleton @TestApi fun provideTestService(): MyService { return MyService("Test API endpoint") } } - V moduloch
-
Vkladanie špecifickej inštancie:
- Na miestach, kde je potrebné vložiť závislosť (
@AndroidEntryPoint), anotujte pole alebo konštruktorový parameter príslušným kvalifikátorom.
@AndroidEntryPoint // Napríklad Fragment alebo Activity class MyFragment : Fragment() { @Inject @Named("개발") // Vkladáme inštanciu "Pre vývoj" lateinit var devRepository: Repository @Inject @Named("운영") // Vkladáme inštanciu "Pre produkciu" lateinit var prodRepository: Repository @Inject @ProductionApi // Vkladáme inštanciu pre produkciu s vlastným kvalifikátorom lateinit var productionService: MyService // ... použitie závislostí ... } - Na miestach, kde je potrebné vložiť závislosť (