Middle+
Kā nodrošināt dažādas tā paša klases instances Dagger Hilt?
sobes.tech AI
Atbilde no AI
Dagger Hilt ļauj nodrošināt dažādas vienas un tās pašas klases instancijas, izmantojot kvalifikatorus (@Named vai savus pielāgotus).
-
Kvalifikatoru izveide:
- Izmantojiet
@Namedvienkāršiem gadījumiem, norādot virknes nosaukumu. - Izveidojiet savus pielāgotus anotāciju kvalifikatorus sarežģītākiem scenārijiem vai labākai semantikai.
// Piemērs lietotāja kvalifikatoram @Qualifier @Retention(AnnotationRetention.RUNTIME) annotation class ProductionApi @Qualifier @Retention(AnnotationRetention.RUNTIME) annotation class TestApi - Izmantojiet
-
Dažādu instanču saistīšana ar kvalifikatoru palīdzību:
- Moduļos
Hilt(@Module), iekš klasēm ar@Providesvai@Binds, izmantojiet kvalifikatoru anotācijas metodēm, kas atgriež instancēs.
@Module @InstallIn(SingletonComponent::class) // piemērs sērijai object AppModule { @Provides @Singleton // sērijas piemērs @Named("개발") // kvalifikators @Named "Izstrādes" fun provideDevRepository(): Repository { return Repository("Izstrādes vide") // dažāda instancē vai konfigurācija } @Provides @Singleton // sērijas piemērs @Named("운영") // kvalifikators @Named "Ražošanai" fun provideProdRepository(): Repository { return Repository("Ražošanas vide") // dažāda instancē vai konfigurācija } // Pielāgotu kvalifikatoru izmantošana @Provides @Singleton @ProductionApi fun provideProductionService(): MyService { return MyService("Production API endpoint") } @Provides @Singleton @TestApi fun provideTestService(): MyService { return MyService("Test API endpoint") } } - Moduļos
-
Konkrētas instancijas ievade:
- Vietās, kur nepieciešams ievadīt atkarību (
@AndroidEntryPoint), atzīmējiet lauku vai konstruktoru ar atbilstošu kvalifikatoru.
@AndroidEntryPoint // Piemēram, Fragment vai Activity class MyFragment : Fragment() { @Inject @Named("개발") // Ievada "Izstrādes" instanci lateinit var devRepository: Repository @Inject @Named("운영") // Ievada "Ražošanas" instanci lateinit var prodRepository: Repository @Inject @ProductionApi // Ievada ražošanas instanci ar pielāgotu kvalifikatoru lateinit var productionService: MyService // ... atkarību izmantošana ... } - Vietās, kur nepieciešams ievadīt atkarību (