Middle+
Чӣ гуна метавон дар Dagger Hilt намунаҳои гуногуни як синфро таъмин кард؟
sobes.tech AI
Ҷавоб аз AI
Дарахти додани наслонҳои як ва он вакил дар 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 // ... истифодаи вобастагиҳо ... } - Дар ҷойҳое, ки лозим аст, вобастагиро ворид кунед (