أسئلة مقابلات Dependency Injection & Configuration في .NET
10 سؤال عن Dependency Injection & Configuration من مسار .NET. اقرأ الإجابة المختصرة لكل سؤال هنا، وافتح السؤال للشرح الكامل والأمثلة والأخطاء الشائعة والمصادر.
- مبتدئ
ما الفرق الجوهري بين فترات حياة الخدمات (Lifetimes): Transient و Scoped و Singleton في .NET؟
Transient تنشئ نسخة جديدة مع كل طلب حقن، وScoped تنشئ نسخة واحدة لكل طلب HTTP تشترك فيها كل المكونات، وSingleton تنشئ نسخة واحدة للأبد تشاركها كامل العملية.
اقرأ الشرح الكامل - متقدم
ما هي تبعية الأسير (Captive Dependency) في حاوية الـ DI بـ .NET وكيف تكتشفها وتمنعها؟
تحدث عندما تُحقن خدمة ذات نطاق أقصر (مثل Scoped) داخل خدمة ذات نطاق أطول (مثل Singleton)، مما يحبس النسخة الـ Scoped في الذاكرة للأبد ويمنع تنظيفها.
اقرأ الشرح الكامل - متوسط
كيف تعمل الخدمات ذات المفاتيح (Keyed Services) المضافة في .NET 8 وكيف حلت معضلة تعدد التطبيقات؟
تسمح بتسجيل عدة تطبيقات لنفس الواجهة بمفاتيح تمييز صريحة واستدعائها بدقة عبر سمة [FromKeyedServices("key")] دون الحاجة لمصانع مخصصة.
اقرأ الشرح الكامل - متوسط
من المسؤول عن استدعاء دالة Dispose() للخدمات التي تطبق IDisposable عند استخدام حاوية .NET DI؟
حاوية الـ DI هي المسؤولة حصراً عن استدعاء Dispose() تلقائياً لجميع الخدمات التي أنشأتها هي، عند انتهاء فترة حياة النطاق (Scope) أو انتهاء التطبيق للـ Singletons.
اقرأ الشرح الكامل - متقدم
كيف تسهل مكتبة Scrutor فحص التجميعات وتسجيل الخدمات تلقائياً (Assembly Scanning) بنمط Convention-over-Configuration؟
تفحص فئات المشروع آلياً وتسجل الفئات التي تطبق واجهات مطابقة (Matching Interfaces) بنطاقات محددة بسطر واحد دون كتابة مئات سطور AddScoped اليدوية.
اقرأ الشرح الكامل - متوسط
لماذا يعد نمط Service Locator (حقن IServiceProvider مباشرة) نمطاً مضاداً (Anti-pattern) في C#؟
لأنه يخفي التبعيات الحقيقية للفئة، ويعطل فحص المترجم الساكن، ويصعب كتابة اختبارات الوحدة، وقد يؤدي لأخطاء وقت التشغيل عند طلب خدمات غير مسجلة.
اقرأ الشرح الكامل - متقدم
كيف تسجل وتستدعي الأنواع الجنيسة المفتوحة (Open Generics) مثل IRepository<> في حاوية .NET؟
بتسجيل نوع الواجهة المفتوحة ونوع التطبيق المفتوح بدون تحديد المعامل عبر typeof(IRepository<>) و typeof(Repository<>)، لتقوم الحاوية بتوليد النوع المغلق تلقائياً.
اقرأ الشرح الكامل - مبتدئ
ما هي ميزة سمة [FromServices] ومتى تفضل حقن الخدمة في دالة الـ Action بدلاً من الباني؟
تسمح بحقن التبعية مباشرة كمعامل في دالة الـ Action المحددة فقط، وتفضل عندما تكون الخدمة باهظة وتستخدم حصراً في مسار واحد دون باقي المتحكم.
اقرأ الشرح الكامل - متوسط
ماذا يحدث عند تسجيل عدة فئات تطبق نفس الواجهة في حاوية .NET وكيف تسترجعها جميعاً؟
طلب الواجهة الفردية IService يعيد آخر فئة تم تسجيلها فقط، بينما حقن مصفوفة IEnumerable<IService> يسترجع جميع التطبيقات المسجلة بالترتيب.
اقرأ الشرح الكامل - متقدم
متى تلجأ لاستبدال الحاوية المدمجة في .NET بحاوية متقدمة مثل Autofac؟
عند الحاجة لميزات متقدمة غير مدعومة أصلياً مثل Property Injection، والـ Interception للبرمجة الموجهة للجوانب (AOP)، والنطاقات المخصصة المعقدة.
اقرأ الشرح الكامل