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
    
        // ... დამოკიდებულებების გამოყენება ...
    }