Middle+
Wie stellt man verschiedene Instanzen derselben Klasse in Dagger Hilt bereit?
sobes.tech KI
Antwort von AI
Um eine Vielzahl von Instanzen derselben Klasse in Dagger Hilt bereitzustellen, können Sie Qualifikatoren (@Named oder benutzerdefinierte) verwenden.
-
Erstellen von Qualifikatoren:
- Verwenden Sie
@Namedfür einfache Fälle, indem Sie einen String-Namen angeben. - Erstellen Sie Ihre eigenen benutzerdefinierten Qualifikator-Annotationen für komplexere Szenarien oder bessere Semantik.
// Beispiel für einen benutzerdefinierten Qualifikator @Qualifier @Retention(AnnotationRetention.RUNTIME) annotation class ProductionApi @Qualifier @Retention(AnnotationRetention.RUNTIME) annotation class TestApi - Verwenden Sie
-
Verknüpfung verschiedener Instanzen mit Qualifikatoren:
- In
Hilt-Modulen (@Module), innerhalb von Klassen mit@Providesoder@Binds, verwenden Sie Qualifikator-Annotationen für Methoden, die Instanzen zurückgeben.
@Module @InstallIn(SingletonComponent::class) // Beispiel für Scope object AppModule { @Provides @Singleton // Beispiel für Scope @Named("개발") // Qualifikator @Named für die Instanz "Für Entwicklung" fun provideDevRepository(): Repository { return Repository("개발 Umgebung") // Verschiedene Instanz oder Konfiguration } @Provides @Singleton // Beispiel für Scope @Named("운영") // Qualifikator @Named für die Instanz "Für Produktion" fun provideProdRepository(): Repository { return Repository("운영 Umgebung") // Verschiedene Instanz oder Konfiguration } // Verwendung benutzerdefinierter Qualifikatoren @Provides @Singleton @ProductionApi fun provideProductionService(): MyService { return MyService("Production API-Endpunkt") } @Provides @Singleton @TestApi fun provideTestService(): MyService { return MyService("Test API-Endpunkt") } } - In
-
Injektion einer spezifischen Instanz:
- An den Stellen, an denen die Abhängigkeit injiziert werden soll (
@AndroidEntryPoint), annotieren Sie das Feld oder den Konstruktorparameter mit dem entsprechenden Qualifikator.
@AndroidEntryPoint // Zum Beispiel Fragment oder Activity class MyFragment : Fragment() { @Inject @Named("개발") // Injektieren der "Für Entwicklung" Instanz lateinit var devRepository: Repository @Inject @Named("운영") // Injektieren der "Für Produktion" Instanz lateinit var prodRepository: Repository @Inject @ProductionApi // Injektieren der Instanz für Produktion mit benutzerdefiniertem Qualifikator lateinit var productionService: MyService // ... Verwendung der Abhängigkeiten ... } - An den Stellen, an denen die Abhängigkeit injiziert werden soll (