تكرار السؤال: …
الإجابة المختصرة
طلب الواجهة الفردية IService يعيد آخر فئة تم تسجيلها فقط، بينما حقن مصفوفة IEnumerable<IService> يسترجع جميع التطبيقات المسجلة بالترتيب.
الشرح
إذا قمت بتسجيل 3 خدمات تدقيق: services.AddScoped<IValidator, A>(); services.AddScoped<IValidator, B>(); services.AddScoped<IValidator, C>(); فإن طلب IValidator منفرد سيعيد الفئة C دائماً (Last In Wins). لاسترجاع وتشغيل كل أدوات التدقيق معاً، يتم حقن IEnumerable<IValidator> في الباني، حيث تمرر الحاوية مصفوفة تحتوي على النسخ الثلاث جاهزة للتكرار عليها في حلقة.
مثال بالكود
public class CompositeValidator(IEnumerable<IValidator> validators) {
public void ValidateAll(Order order) {
foreach (var v in validators) v.Validate(order);
}
}أخطاء شائعة
- استخدام AddScoped بدلاً من TryAddEnumerable عند الرغبة في منع تكرار تسجيل نفس التطبيق بالخطأ.