تكرار السؤال: …
الإجابة المختصرة
بتعريف وسوم مخصصة (Custom Annotations) موسومة بـ @Qualifier لتمييز كل نسخة (مثل عميل شبكة موثق وعميل شبكة عام).
الشرح
عندما يحتاج التطبيق إلى نسختين من OkHttpClient أو Retrofit بإعدادات مختلفة، يفشل Dagger وقت الترجمة لعدم قدرته على التمييز بينهما. بحل هذا التعارض عبر @Qualifier، نربط كل نسخة بوسم فريد، ثم نستخدم نفس الوسم عند نقطة الحقن ليعرف Hilt أي نسخة محددة يجب تقديمها.
مثال بالكود
@Qualifier
@Retention(AnnotationRetention.BINARY)
annotation class AuthInterceptorOkHttpClient
@Qualifier
@Retention(AnnotationRetention.BINARY)
annotation class PublicOkHttpClient
// في نقطة التوفير:
@Provides
@AuthInterceptorOkHttpClient
fun provideAuthClient(): OkHttpClient = ...
// في نقطة الاستخدام:
class UserRemoteDataSource @Inject constructor(
@AuthInterceptorOkHttpClient private val client: OkHttpClient
)أخطاء شائعة
- استخدام @Named مع نصوص يدوية بدلاً من كتابة Custom Qualifiers قوية، مما يسبب أخطاء هجائية صعبة الاكتشاف وقت التشغيل.