Middle+
Kako obezbediti različite instance iste klase u Dagger Hilt?
sobes.tech АИ
Одговор од АИ
За пружање различитих инстанци истог класа у Dagger Hilt можете користити квалификаторе (@Named или своје прилагођене).
-
Креирање квалификатора:
- Користите
@Namedза једноставне случајеве, наводећи низово име. - Креирајте своје прилагођене анотације-квалификаторе за сложеније сценарије или бољу семантику.
// Пример корисничког квалификатора @Qualifier @Retention(AnnotationRetention.RUNTIME) annotation class ProductionApi @Qualifier @Retention(AnnotationRetention.RUNTIME) annotation class TestApi - Користите
-
Повезивање различитих инстанци коришћењем квалификатора:
- У модулима
Hilt(@Module), унутар класа са@Providesили@Binds, користите анотације-квалификаторе за методе које враћају инстанце.
@Module @InstallIn(SingletonComponent::class) // пример скоупа object AppModule { @Provides @Singleton // пример скоупа @Named("개발") // квалификатор @Named за инстанцу "За развој" fun provideDevRepository(): Repository { return Repository("개발 окружење") // различита инстанца или конфигурација } @Provides @Singleton // пример скоупа @Named("운영") // квалификатор @Named за инстанцу "За продукцију" fun provideProdRepository(): Repository { return Repository("운영 окружење") // различита инстанца или конфигурација } // Коришћење прилагођених квалификатора @Provides @Singleton @ProductionApi fun provideProductionService(): MyService { return MyService("Production API endpoint") } @Provides @Singleton @TestApi fun provideTestService(): MyService { return MyService("Test API endpoint") } } - У модулима
-
Уметање специфичне инстанце:
- У местима где је потребно уметнути зависност (
@AndroidEntryPoint), анотирајте поље или конструкторски параметар одговарајућим квалификатором.
@AndroidEntryPoint // на пример, Fragment или Activity class MyFragment : Fragment() { @Inject @Named("개발") // Уметање инстанце "За развој" lateinit var devRepository: Repository @Inject @Named("운영") // Уметање инстанце "За продукцију" lateinit var prodRepository: Repository @Inject @ProductionApi // Уметање инстанце за продукцију са прилагођеним квалификатором lateinit var productionService: MyService // ... коришћење зависности ... } - У местима где је потребно уметнути зависност (