تكوين تطبيقات C# (.NET): دليل شامل لمكتبة Microsoft.Extensions.Configuration
تتطلب التطبيقات الحديثة بلغة C# و.NET إدارة مرنة للإعدادات: سلاسل الاتصال بقواعد البيانات، عناوين URL للخدمات الخارجية، معلمات التسجيل، إلخ. توفر مكتبة Microsoft.Extensions.Configuration آلية قوية وموحدة للعمل مع التكوين. وهي تدعم مصادر بيانات متعددة (JSON، XML، متغيرات البيئة، وسائط سطر الأوامر) وتسمح بدمجها في تسلسل هرمي واحد.
الميزات الرئيسية للمكتبة
- الدمج متعدد المستويات — يتم دمج الإعدادات من مصادر مختلفة في كائن واحد.
- أولوية المصادر — المصدر المضاف أخيرًا يتجاوز المصادر السابقة.
- الربط بالفئات (نمط Options) — تعبئة تلقائية لكائنات POCO من التكوين.
- التحديث الديناميكي — دعم إعادة قراءة الملفات دون إعادة تشغيل التطبيق.
- الأمان — يمكن نقل البيانات الحساسة إلى متغيرات البيئة أو Azure Key Vault.
الاستخدام الأساسي: القراءة من appsettings.json
أنشئ ملف appsettings.json في جذر المشروع:
{ "Logging": { "LogLevel": { "Default": "Information", "Microsoft": "Warning" } }, "ConnectionStrings": { "DefaultConnection": "Server=localhost;Database=mydb;User Id=sa;Password=***;" }, "AppSettings": { "AppName": "MyApp", "MaxRetries": 3, "FeatureFlags": { "EnableNewUI": true, "EnableAnalytics": false } }}قم بتحميل التكوين في الكود:
using Microsoft.Extensions.Configuration;
var configuration = new ConfigurationBuilder() .SetBasePath(Directory.GetCurrentDirectory()) .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true) .Build();
// قراءة القيم البسيطةstring appName = configuration["AppSettings:AppName"];int maxRetries = int.Parse(configuration["AppSettings:MaxRetries"]);
// قراءة الأقسام المتداخلةvar loggingSection = configuration.GetSection("Logging:LogLevel");string defaultLevel = loggingSection["Default"];
// قراءة سلسلة الاتصالstring connString = configuration.GetConnectionString("DefaultConnection");
Console.WriteLine($"التطبيق: {appName}, عدد المحاولات: {maxRetries}");أولوية ودمج المصادر
يمكنك دمج عدة مصادر. على سبيل المثال، قم أولاً بتحميل JSON، ثم تجاوز معلمات محددة عبر متغيرات البيئة:
var config = new ConfigurationBuilder() .AddJsonFile("appsettings.json") .AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true) // لـ Development/Production .AddEnvironmentVariables() // متغيرات البيئة لها أولوية أعلى .AddCommandLine(args) // وسائط سطر الأوامر لها أعلى أولوية .Build();الربط بالفئات المكتوبة بشدة (نمط Options)
أنشئ فئة لقسم التكوين:
public class AppSettings{ public string AppName { get; set; } public int MaxRetries { get; set; } public FeatureFlags FeatureFlags { get; set; }}
public class FeatureFlags{ public bool EnableNewUI { get; set; } public bool EnableAnalytics { get; set; }}ثم قم بربطه في Program.cs باستخدام حاوية DI:
// تسجيل الخدماتbuilder.Services.Configure<AppSettings>( builder.Configuration.GetSection("AppSettings"));
// الاستخدام في فئة (مثل وحدة التحكم)public class HomeController : Controller{ private readonly AppSettings _settings; public HomeController(IOpti