Sobes.tech
Middle+

Comment fournir différentes instances d'une même classe dans Dagger Hilt?

sobes.tech IA

Réponse de l'IA

Pour fournir différentes instances de la même classe dans Dagger Hilt, vous pouvez utiliser des qualificatifs (@Named ou personnalisés).

  1. Création de qualificatifs :

    • Utilisez @Named pour des cas simples, en indiquant un nom de chaîne.
    • Créez vos propres annotations de qualificatifs personnalisés pour des scénarios plus complexes ou une meilleure sémantique.
    // Exemple de qualificatif personnalisé
    @Qualifier
    @Retention(AnnotationRetention.RUNTIME)
    annotation class ProductionApi
    
    @Qualifier
    @Retention(AnnotationRetention.RUNTIME)
    annotation class TestApi
    
  2. Liaison de différentes instances en utilisant des qualificatifs :

    • Dans les modules Hilt (@Module), à l'intérieur des classes avec @Provides ou @Binds, utilisez des annotations de qualificatifs pour les méthodes retournant des instances.
    @Module
    @InstallIn(SingletonComponent::class) // Exemple de portée
    object AppModule {
    
        @Provides
        @Singleton // Exemple de portée
        @Named("개발") // Qualificatif @Named pour l'instance "Pour développement"
        fun provideDevRepository(): Repository {
            return Repository("개발 환경") // Instance ou configuration différente
        }
    
        @Provides
        @Singleton // Exemple de portée
        @Named("운영") // Qualificatif @Named pour l'instance "Pour production"
        fun provideProdRepository(): Repository {
            return Repository("운영 환경") // Instance ou configuration différente
        }
    
        // Utilisation de qualificatifs personnalisés
        @Provides
        @Singleton
        @ProductionApi
        fun provideProductionService(): MyService {
            return MyService("Point de terminaison API de production")
        }
    
        @Provides
        @Singleton
        @TestApi
        fun provideTestService(): MyService {
            return MyService("Point de terminaison API de test")
        }
    }
    
  3. Injection d'une instance spécifique :

    • Dans les endroits où il faut injecter la dépendance (@AndroidEntryPoint), annotez le champ ou le paramètre du constructeur avec le qualificatif correspondant.
    @AndroidEntryPoint // Par exemple, Fragment ou Activity
    class MyFragment : Fragment() {
    
        @Inject
        @Named("개발") // Injection de l'instance "Pour développement"
        lateinit var devRepository: Repository
    
        @Inject
        @Named("운영") // Injection de l'instance "Pour production"
        lateinit var prodRepository: Repository
    
        @Inject
        @ProductionApi // Injection de l'instance pour la production avec qualificateurs personnalisés
        lateinit var productionService: MyService
    
        // ... utilisation des dépendances ...
    }