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 - Χρησιμοποιήστε το
-
Δέσμευση διαφορετικών στιγμιότυπων με χρήση προσδιοριστών:
- Στα modules του
Hilt(@Module), μέσα σε κλάσεις με@Providesή@Binds, χρησιμοποιήστε τις αναφορές προσδιοριστών σε μεθόδους που επιστρέφουν στιγμιότυπα.
@Module @InstallIn(SingletonComponent::class) // Παράδειγμα scope object AppModule { @Provides @Singleton // Παράδειγμα scope @Named("개발") // Προσδιοριστής @Named για το στιγμιότυπο "Για ανάπτυξη" fun provideDevRepository(): Repository { return Repository("Περιβάλλον ανάπτυξης") // Διαφορετικό στιγμιότυπο ή διαμόρφωση } @Provides @Singleton // Παράδειγμα scope @Named("운영") // Προσδιοριστής @Named για το στιγμιότυπο "Για παραγωγή" fun provideProdRepository(): Repository { return Repository("Περιβάλλον παραγωγής") // Διαφορετικό στιγμιότυπο ή διαμόρφωση } // Χρήση προσαρμοσμένων προσδιοριστών @Provides @Singleton @ProductionApi fun provideProductionService(): MyService { return MyService("Τέλος σημείου API παραγωγής") } @Provides @Singleton @TestApi fun provideTestService(): MyService { return MyService("Τέλος σημείου API δοκιμής") } } - Στα modules του
-
Εγχυση συγκεκριμένου στιγμιότυπου:
- Στα σημεία όπου χρειάζεται να γίνει η εξάρτηση (
@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 // ... χρήση των εξαρτήσεων ... } - Στα σημεία όπου χρειάζεται να γίνει η εξάρτηση (