Middle+
Jak poskytnout různé instance stejné třídy v Dagger Hilt?
sobes.tech AI
Odpověď od AI
Pro poskytování různých instancí stejné třídy v Dagger Hilt lze použít kvalifikátory (@Named nebo vlastní).
-
Vytvoření kvalifikátorů:
- Použijte
@Namedpro jednoduché případy, s uvedením řetězcového jména. - Vytvořte vlastní anotace kvalifikátorů pro složitější scénáře nebo lepší sémantiku.
// Příklad vlastního kvalifikátoru @Qualifier @Retention(AnnotationRetention.RUNTIME) annotation class ProductionApi @Qualifier @Retention(AnnotationRetention.RUNTIME) annotation class TestApi - Použijte
-
Vazba různých instancí pomocí kvalifikátorů:
- V modulech
Hilt(@Module), uvnitř tříd s@Providesnebo@Binds, používejte anotace kvalifikátorů pro metody vracející instance.
@Module @InstallIn(SingletonComponent::class) // Příklad scope object AppModule { @Provides @Singleton // Příklad scope @Named("개발") // Kvalifikátor @Named pro instanci "Pro vývoj" fun provideDevRepository(): Repository { return Repository("Vývojové prostředí") // Různá instance nebo konfigurace } @Provides @Singleton // Příklad scope @Named("운영") // Kvalifikátor @Named pro instanci "Pro produkci" fun provideProdRepository(): Repository { return Repository("Produkční prostředí") // Různá instance nebo konfigurace } // Použití vlastních kvalifikátorů @Provides @Singleton @ProductionApi fun provideProductionService(): MyService { return MyService("Endpoint API pro produkci") } @Provides @Singleton @TestApi fun provideTestService(): MyService { return MyService("Endpoint API pro testování") } } - V modulech
-
Injekce specifické instance:
- Na místech, kde je potřeba injektovat závislost (
@AndroidEntryPoint), označte pole nebo parametr konstruktoru odpovídajícím kvalifikátorem.
@AndroidEntryPoint // Například Fragment nebo Activity class MyFragment : Fragment() { @Inject @Named("개발") // Injektuje instanci "Pro vývoj" lateinit var devRepository: Repository @Inject @Named("운영") // Injektuje instanci "Pro produkci" lateinit var prodRepository: Repository @Inject @ProductionApi // Injektuje instanci pro produkci s vlastním kvalifikátorem lateinit var productionService: MyService // ... použití závislostí ... } - Na místech, kde je potřeba injektovat závislost (