تكوين تطبيقات C# (.NET): دليل شامل
التكوين هو أحد الجوانب الرئيسية لتطوير التطبيقات الحديثة بلغة C# (.NET). فهو يسمح بفصل معلمات تشغيل البرنامج عن الكود، مما يجعل التطبيق مرنًا وقابلاً للنقل وآمنًا. في هذه المقالة، سنشرح بالتفصيل مكتبة Microsoft.Extensions.Configuration - الأداة الرئيسية لإدارة التكوين في .NET Core و .NET 5/6/7/8+.
لماذا نحتاج إلى التكوين؟
بدلاً من تضمين سلاسل الاتصال أو عناوين URL أو مفاتيح API بشكل ثابت في الكود، يسمح التكوين بتخزين هذه البيانات في ملفات (JSON، XML، INI)، أو متغيرات البيئة، أو الأسرار. هذا يبسط النشر على بيئات مختلفة (dev، staging، prod) ويزيد الأمان.
المكونات الرئيسية للمكتبة
- IConfiguration — واجهة تمثل شجرة إعدادات واحدة.
- IConfigurationBuilder — الباني الذي يجمع التكوين من مصادر مختلفة.
- ConfigurationRoot — الكائن الجذري الذي ينفذ
IConfiguration. - Source Providers — موفرو البيانات: JSON، XML، INI، متغيرات البيئة، سطر الأوامر، الذاكرة، المخصصون.
تثبيت المكتبة
المكتبة جزء من .NET SDK، لذلك لا يلزم تثبيت إضافي لمعظم المشاريع. ومع ذلك، للعمل مع ملفات JSON في تطبيقات وحدة التحكم، يجب إضافة الحزمة:
dotnet add package Microsoft.Extensions.Configuration.Jsonمثال أساسي: القراءة من appsettings.json
لننشئ ملف appsettings.json:
{ "AppSettings": { "SiteName": "PythonLib", "Version": "1.0", "Logging": { "Level": "Information", "File": "logs/app.log" } }}الآن سنقرأه في تطبيق وحدة التحكم:
using Microsoft.Extensions.Configuration;
class Program{ static void Main() { var builder = new ConfigurationBuilder() .SetBasePath(Directory.GetCurrentDirectory()) .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true);
IConfiguration config = builder.Build();
string siteName = config["AppSettings:SiteName"]; string logLevel = config["AppSettings:Logging:Level"];
Console.WriteLine($"Site: {siteName}, Log Level: {logLevel}"); }}استخدام مصادر متعددة
من أهم مزايا Microsoft.Extensions.Configuration دعم سلاسل المصادر. المصدر المضاف أخيرًا له الأولوية القصوى. سلسلة نموذجية:
appsettings.json— الإعدادات الأساسية.appsettings.{Environment}.json— إعدادات لبيئة محددة (Development، Production).Environment Variables— تجاوز لـ CI/CD و Docker.Command Line Arguments— لتجاوزات مؤقتة عند التشغيل.
مثال على إعداد السلسلة:
var builder = new ConfigurationBuilder() .SetBasePath(Directory.GetCurrentDirectory()) .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true) .AddJsonFile($"appsettings.{Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT") ?? "Production"}.json", optional: true) .AddEnvironmentVariables() .AddCommandLine(args);العمل مع الأقسام والتكوين المكتوب بشدة
لتسهيل الأمر، يمكن ربط أقسام التكوين بفئات POCO. دعنا نعرف الفئة:
public class AppSettings{ public string SiteName { get; set; } public string Version { get; set; } public LoggingSettings Logging { get; set; }}
public class LoggingSettings{ public string Level { get; set; } public string File أيضاً في المكتبة
العمل مع أرشيفات ZIP في Java: java.util.zip و Zip4j
عميل HTTP لجافا: نظرة عامة على أفضل المكتبات (Java 11، Apache، OkHttp، Retrofit)
التعلم الآلي باستخدام JavaScript (Node.js): مكتبات للتعلم الآلي
توليد تقارير PDF باستخدام TypeScript: المكتبات والأدوات
مكتبة WebSocket بلغة C++: دليل شامل للاختيار والاستخدام