Sobes.tech
Middle+

Чӣ гуна метавон дар Dagger Hilt намунаҳои гуногуни як синфро таъмин кард؟

sobes.tech AI

Ҷавоб аз AI

Дарахти додани наслонҳои як ва он вакил дар Dagger Hilt, шумо метавонед истифода баред квалификаторҳо (@Named ё худсозии махсуси).

  1. Сохтани квалификаторҳо:

    • Истифода баред @Named барои ҳолатҳои оддӣ, нишон додани номи сатрӣ.
    • Эҷод кунед анотацияҳои махсуси квалификатор барои сценарийҳои мураккаб ё семантикаи беҳтар.
    // Мисоли квалификатори истифодашуда
    @Qualifier
    @Retention(AnnotationRetention.RUNTIME)
    annotation class ProductionApi
    
    @Qualifier
    @Retention(AnnotationRetention.RUNTIME)
    annotation class TestApi
    
  2. Пайваст кардани инстансияҳои гуногун бо истифода аз квалификаторҳо:

    • Дар модулҳо 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")
        }
    }
    
  3. Вуруд кардани инстансияи махсус:

    • Дар ҷойҳое, ки лозим аст, вобастагиро ворид кунед (@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
    
        // ... истифодаи вобастагиҳо ...
    }