استخدم نوع ConfigurationBuilder

مكتمل

يعد تكوين التطبيق أمرا أساسيا لبنائه بطريقة تسمح بتنوع تبعياته، استنادا إلى البيئة التي تقوم بنشره فيها. في تطبيقات .NET Framework، تتمثل الآلية الأكثر شيوعاً لتخصيص تكوين تطبيق في نوع ConfigurationManager. يمكنك استخدام مدير التكوين لقراءة الإعدادات التي عادةً ما تُخزن في ملف app.config لتطبيقات سطح المكتب، أو في ملف web.config لتطبيقات الويب ASP.NET.

يتمثّل أحد التحديات التي تواجه تخزين إعدادات التكوين بهذه الطريقة في أنه عادةً ما ينتهي المطاف بالقيم التي يتعين المحافظة على سريتها وهي مُخزنة كنص عادي في مكان ما. تتسبب هذه الممارسة في حدوث ثغرة أمنية. تستخدم فئة ConfigurationBuilder لإزالة هذه الثغرة الأمنية.

ما فئة ConfigurationBuilder؟

يسمح نهج ConfigurationManager المستخدم من قبل العديد من تطبيقات الويب التقليدية .NET Framework ASP.NET للمسؤول بتخزين معلومات التكوين كسلسلة من المفاتيح والقيم في ملف تكوين. ConfigurationManager هو الآلية الأساسية لتجنب معلومات الأسلاك الصلبة في التطبيق، ومعظم المطورين ASP.NET يفهمونها جيدا.

كما يمكن أن يُشكل استخدام ConfigurationManager قصوراً كبيراً. ليس من السهل تخزين معلومات التكوين واستردادها في مصادر أخرى غير ملف التكوين المقترن بالتطبيق. غالبا ما تحتاج أنظمة المؤسسات واسعة النطاق، خاصة تلك الأنظمة التي تعمل في السحابة، إلى تكييف تكوينها ديناميكيا، وتتطلب مصادر أخرى لمعلومات التكوين.

بالإضافة إلى ذلك، يتم عادة الاحتفاظ بملف التكوين المستخدم بواسطة ConfigurationManager كنص عادي، على الرغم من توفر بعض خيارات التشفير. يمكن أن يكون التشفير معقداً، ولا يزال يحتاج إلى مفتاح تشفير ليتم تخزينه في مكان ما. لا يعد حل الترميز المضمن لمفتاح التشفير في التعليمة البرمجية للتطبيق حلاً آمناً، حتى بعد تجميع التطبيق برمجياً. يمكن للمهاجم المصمم تفكيك التعليمة البرمجية الخاصة بك وقراءة المفتاح. يمكن لهذه المسائل أن تجعل استخدام ConfigurationManager آلية غير مناسبة لتخزين معلومات التكوين الحساسة، مثل كلمات المرور وسلاسل الاتصال، ما لم يتم اتخاذ قدر كبير من العناية.

تم تصميم كائن ConfigurationBuilder لتمكينك من استرداد معلومات التكوين من مصادر مختلفة.

آلية ConfigurationBuilder هي امتداد للمفاهيم التي تنفذها فئة ConfigurationManager. بدلا من تقييد معلومات التكوين بنحو XML صارم مخزن في ملف نصي، يمكنك استخدام منشئات تكوين مختلفة، استنادا إلى مصادر تكوين مختلفة. يوفر منشئ التكوين وسائله الخاصة للوصول إلى البيانات. تتضمن منشئات التكوين المتوفرة حاليًا ما يلي:

  • Microsoft.Configuration.ConfigurationBuilders.Environment: يضيف إعدادات من متغيرات البيئة للعملية الحالية.
  • Microsoft.Configuration.ConfigurationBuilders.UserSecrets: يضيف أسرار المستخدم المضمنة في ملف XML خارج قاعدة التعليمات البرمجية.
  • Microsoft.Configuration.ConfigurationBuilders.Azure: يسحب العناصر من مخزن المفاتيح.
  • Microsoft.Configuration.ConfigurationBuilders.KeyPerFile: مستند إلى الملف، حيث يكون اسم الملف هو المفتاح، والمحتويات هي القيمة.
  • Microsoft.Configuration.ConfigurationBuilders.Json: يسحب أزواج المفاتيح/القيم من ملفات JSON.

يمكنك أيضا إنشاء فئة ConfigurationBuilder المخصصة الخاصة بك إذا كنت بحاجة إلى الوصول إلى معلومات التكوين الموجودة في متجر لا يتوفر له منشئ حاليا.

يعتمد اختيار أي منشئ تكوين يجب استخدامه على السيناريوهات ومتطلبات التطبيق الفردي.

كيفية عمل كائنات ConfigurationBuilder

يقرأ التطبيق المعلومات من كائن منشئ التكوين بالطريقة نفسها تماماً كما كان يفعل في السابق، باستخدام كائن ConfigurationManager. يمكنك الاستمرار في استخدام مصطلح ConfigurationManager.AppSettings["settingName"]، ولن تحتاج إلى تغيير التعليمة البرمجية لتطبيقك.

بدلاً من ذلك، يمكنك تقديم تفاصيل منشئات التكوين لاستخدامها في ملف تكوين التطبيق. يمكنك تحديد أي المنشئات يتعين تطبيقها لاسترداد إعدادات التطبيق وسلاسل الاتصال باستخدام سمة configBuilders في قسمي appSettings وconnectionStrings في ملف تكوين التطبيق.

يمكنك إضافة أنواع ConfigurationBuilder إلى <قسم configBuilders> في التكوين. يتم تعيين اسم لكل منشئ تضيفه (سلسلة تستخدم للإشارة إلى المنشئ من مكان آخر في التكوين)، واسم النوع الكامل. يأخذ العديد من المنشئين معلمات أخرى خاصة بالبناء. تحتاج كذلك إلى إضافة المجموعة التي تعالج القسم <configBuilders>.

إشعار

إذا أضفت منشئات التكوين إلى مشروع باستخدام أمر Install-Package أو مدير الحزم في Visual Studio، يُضاف القسم <configBuilders> والمجموعات المرتبطة إلى ملف التكوين تلقائياً.

يضيف المثال التالي المنشئات لاستخدام متغيرات البيئة وأسرار المستخدم. تشير معلمة userSecretsId إلى هوية سر المستخدم الذي يحتوي على البيانات. في وقت التشغيل، يبحث المنشئ في ملف secrets.xml المُخزن في موقع محمي (%APPDATA%\Microsoft\UserSecrets<userSecretsId>\secrets.xml في Windows)، لمعرفة القيمة التي سيتم استخدامها:

<configuration>
  <configSections>
    <section name="configBuilders" type="System.Configuration.ConfigurationBuildersSection, System.Configuration, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" restartOnExternalChanges="false" requirePermission="false" />
    ...
  </configSections>
  <configBuilders>
    <builders>
      <add name="Environment" type="Microsoft.Configuration.ConfigurationBuilders.EnvironmentConfigBuilder, Microsoft.Configuration.ConfigurationBuilders.Environment, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
      <add name="Secrets" userSecretsId="c96e0578-6490-4a2d-b6c5-cb2b0baaeae8" type="Microsoft.Configuration.ConfigurationBuilders.UserSecretsConfigBuilder, Microsoft.Configuration.ConfigurationBuilders.UserSecrets, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
    </builders>
  </configBuilders>
  <appSettings configBuilders="Environment,Secrets">
    <add key="MySecretData" value="" />
    <add key="MyEnvironmentData" value="" />
  </appSettings>
  ...
<configuration>

في هذا المثال، عندما يسترد أحد التطبيقات قيمة مفتاح MySecretData أو مفتاح MyEnvironmentData، يتألف إدخال التكوين من قيم من المصادر المحددة. يتم سرد القيم بالترتيب الذي يتم ذكرها به. هنا، تتم إضافة الإدخالات من البيئة أولا، متبوعة بإدخالات من الأسرار. يعني هذا الترتيب أن المصدر الأخير الذي يحتوي على قيمة محددة يتم عرضه للمستخدم. يمكنك تغيير ترتيب البحث بتبديل التسلسل في سمة configBuilders.

إشعار

يتطلب بناء جملة أزواج المفتاح/القيمة في قسم <appSettings> منك تحديد قيمة في ملف التكوين، حتى لو لم يتم استخدامها. في هذه الحالة، من الشائع توفير سلسلة فارغة، كما هو موضح في المثال السابق.