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 // ... დამოკიდებულებების გამოყენება ... } - ადგილებში, სადაც საჭიროა ინახულება დამოკიდებულება (