تكرار السؤال: …
الإجابة المختصرة
IOptions هو Singleton ثابت لا يتغير، وIOptionsSnapshot يُعاد حسابه مع كل طلب HTTP لدعم التحديث الحي، بينما IOptionsMonitor هو Singleton يتلقى إشعارات التغيير الفوري للملفات دون الحاجة لسياق طلب.
الشرح
يوفر نمط Options ربطاً قوياً لملف appsettings.json مع فئات C# نقية. IOptions خفيف ولكنه لا يقرأ التغييرات التي تحدث على الملف بعد الإقلاع. IOptionsSnapshot مخصص لخدمات Scoped ويقرأ التعديلات مع كل طلب جديد. أما IOptionsMonitor فيستخدم في خدمات Singleton والمهام الخلفية BackgroundServices ويطلق حدث OnChange عند تعديل الملف لحظياً.
مثال بالكود
// التسجيل
builder.Services.Configure<PaymentOptions>(builder.Configuration.GetSection("Payment"));
// الاستخدام في الخدمة
public class PaymentService(IOptionsSnapshot<PaymentOptions> options) {
private readonly PaymentOptions _options = options.Value;
}أخطاء شائعة
- حقن IOptionsSnapshot داخل خدمة مسجلة كـ Singleton مما يرمي خطأ فادحاً في الـ Dependency Injection لتضارب النطاقات.