Middle+
Kaip suteikti skirtingas tos pačios klasės instancijas Dagger Hilt?
sobes.tech AI
Atsakymas iš AI
Dagger Hilt'e teikiant skirtingas tos pačios klasės instancijas, galite naudoti kvalifikatorius (@Named arba savo pritaikytus).
-
Kvalifikatorių kūrimas:
- Naudokite
@Namedpaprastiems atvejams, nurodydami eilutės pavadinimą. - Kurkite savo pritaikytus anotacijų kvalifikatorius sudėtingesniems scenarijams arba geresnei semantikui.
// Pavyzdys naudotojo kvalifikatoriaus @Qualifier @Retention(AnnotationRetention.RUNTIME) annotation class ProductionApi @Qualifier @Retention(AnnotationRetention.RUNTIME) annotation class TestApi - Naudokite
-
Skirtingų instancijų susiejimas naudojant kvalifikatorius:
- Moduliuose
Hilt(@Module), klasėse su@Providesarba@Binds, naudokite kvalifikatorių anotacijas metodams, grąžinantiems instancijas.
@Module @InstallIn(SingletonComponent::class) // pavyzdinis sritis object AppModule { @Provides @Singleton // srities pavyzdys @Named("개발") // kvalifikatorius @Named "Vystymui" fun provideDevRepository(): Repository { return Repository("Vystymo aplinka") // skirtinga instancija arba konfigūracija } @Provides @Singleton // srities pavyzdys @Named("운영") // kvalifikatorius @Named "Produkcinė" fun provideProdRepository(): Repository { return Repository("Produkcinė aplinka") // skirtinga instancija arba konfigūracija } // Naudojant pritaikytus kvalifikatorius @Provides @Singleton @ProductionApi fun provideProductionService(): MyService { return MyService("Production API endpoint") } @Provides @Singleton @TestApi fun provideTestService(): MyService { return MyService("Test API endpoint") } } - Moduliuose
-
Įdiegti specifinę instanciją:
- Vietose, kur reikia įdiegti priklausomybę (
@AndroidEntryPoint), pažymėkite lauką arba konstruktoriaus parametrą atitinkamu kvalifikatoriumi.
@AndroidEntryPoint // Pvz., Fragmentas arba Activity class MyFragment : Fragment() { @Inject @Named("개발") // Įdiegti "Vystymui" instanciją lateinit var devRepository: Repository @Inject @Named("운영") // Įdiegti "Produkcinės" instanciją lateinit var prodRepository: Repository @Inject @ProductionApi // Įdiegti instanciją produkcijai su pritaikytu kvalifikatoriumi lateinit var productionService: MyService // ... priklausomybių naudojimas ... } - Vietose, kur reikia įdiegti priklausomybę (