في تطبيقات .Net، غالبًا ما نرى أن مشاريع المشروع التي تم إنشاؤها بواسطة VS لنا ستحتوي على ملفات مثل App.config أو Web.config. هذا الملف هو ما نسميه ملف تكوين التطبيق. يصف هذا الملف بعض المعلومات المتعلقة بتطبيقنا، مثل الاتصال بقاعدة البيانات، ووضع المصادقة، وما إلى ذلك. في البرنامج، يمكننا استخدام خاصية ConnectionStrings الخاصة بـ ConfigurationManager للحصول بسهولة على معلومات سلسلة اتصال قاعدة البيانات في ملف التكوين.
لكن في بعض الأحيان، نحتاج إلى توسيعه وإضافة بعض العناصر المخصصة بدلاً من استخدام التكوين الافتراضي فقط. على سبيل المثال، قد نحتاج إلى تحميل فئة ديناميكيًا وتهيئتها عند بدء تشغيل البرنامج، لكن هذه الفئة أو بيانات التهيئة غير معروفة لنا أثناء تصميم البرنامج. أعتقد أن الجميع واجهوا مثل هذه المشكلة، لذلك لن أشرحها كثيرًا هنا. أفضل طريقة هي كتابة هذه الأشياء التي قد تتغير في ملف التكوين. عندما تكون متأكدًا، ما عليك سوى تعديل ملف التكوين، بدلاً من قضاء 30 ثانية لفتح VS عندما يكون المنتج على وشك الاتصال بالإنترنت الكود.
يعد إضافة بعض العناصر المخصصة إلى ملف التكوين أمرًا سهلاً ولا يستغرق سوى خطوتين:
1. قم بتسجيل اسم العقدة التي تريد تعريفها ومعالج قسم التكوين المستخدم لمعالجة العقدة في العقدة <configSections>. الرمز هو كما يلي:
1 <configSections>2 <section name="dbFactory" type="DbFactory.Configuration.DbFactorySection,DbFactory.Configuration"/>3 </configSections>
2. أضف العقد المخصصة في المواقع المناسبة. الرمز هو كما يلي:
1 <configSections> 2 <section name="dbFactory" type="DbFactory.Configuration.DbFactorySection,DbFactory.Configuration"/> 3 </configSections> 4 <dbFactory> 5 <defaultfactory="sql"></default> 6 <factorys> 7 <add name = "sql" Assembly = "Hello.Data" class = "SqlDbFactory" /> 8 <add name = "Oracle" Assembly = "Hello.Data" class = "OracleDbFactory" /> 9 </ المصانع>10 </dbFactory>
تمت إضافة العقدة المخصصة، ولكن كيف نحصل على معلومات التكوين هذه في البرنامج؟ أعتقد أن العديد منكم خبراء في اللعب باستخدام XML إذا كنت تستخدم بعض الفئات ضمن System.Data. هذا هو الحال بالفعل السيد هو في الواقع سيد أنا معجب به حقا. ولكن إذا تم تنفيذه بهذه الطريقة، فليست هناك حاجة حقًا لكتابة مشاركة المدونة هذه.
يقوم إطار عمل .Net بتنفيذ العديد من واجهات برمجة تطبيقات التكوين لتبسيط عملياتنا على ملفات التكوين. في الخطوة الأولى، ذكرنا معالج قسم التكوين، والذي يُستخدم لقراءة وكتابة معلومات العقدة المخصصة لدينا. فكيف يمكننا تنفيذ معالج قسم التكوين؟ أولاً، دعونا نلقي نظرة على الفئات والمفاهيم ذات الصلة.
قسم التكوين: يجب أن ترث العقد المخصصة هذه الفئة لتوفير معالجة مخصصة ووصول برمجي إلى قسم التكوين المخصص.
ConfigurationElement: يمثل عنصرًا داخل ملف التكوين.
ConfigurationElementCollection: يمثل عنصر تكوين يحتوي على مجموعة من العناصر الفرعية.
باستخدام هذه الفئات، يمكننا تلخيص أن هناك نوعين من عناصر التكوين في ملف التكوين.
أولاً، عنصر التكوين الفردي هو عنصر يرث من ConfigurationElement ولا يحتوي على أي عناصر فرعية.
ثانيًا، عنصر تكوين المجموعة هو عنصر موروث من ConfigurationElementCollection، والذي يحتوي على مجموعة من العناصر الفرعية.
غالبًا ما تكون المفاهيم مجردة نسبيًا لفهم هذه الأشياء، يجب أن نشرحها بالتفصيل بناءً على الأمثلة التي قدمناها أعلاه.
هناك عنصرين في قسم تكوين <dbFactory>، وهما <default> و <factorys>، ويحتوي عنصر <factorys> على عنصرين فرعيين. إذن هنا <default> هو عنصر تكوين واحد، و<factorys> هو عنصر تكوين مجموعة. نحن بحاجة إلى تنفيذ الفئات وخصائصها المقابلة لهذه العناصر على التوالي.
العنصر <الافتراضي>: إنه عنصر من نوع واحد، لذلك نرث ConfigurationElement. هناك سمة مصنع في هذا العنصر، لذلك نحددها وفقًا لذلك في الفصل. الرمز هو كما يلي:
شفرة
public class DefaultElement: ConfigurationElement { [ConfigurationProperty("factory")] public string Factory { get { return this["factory"] } set { this["factory"] = value;
ملاحظة: نحتاج إلى تسجيل سمة ConfigurationProperty للخاصية أعلى تعريف الخاصية.
العناصر الفرعية <factory>:
شفرة
public class FactoryElement: ConfigurationElement { [ConfigurationProperty( "name" )] public string Name { get { return this["name"] as string; set { this["name"] = value } } [ConfigurationProperty("assembly"); )] تجميع السلسلة العامة { get { return this["assembly"] as string; } set { this["assembly"] = value } } [ConfigurationProperty("class")] public string Class { get { return this[" class"] كسلسلة؛ } set { this["class"] = value; } } }
عنصر <factorys> هو عنصر مجموعة ويرث ConfigurationElementCollection.
شفرة
public class FactoryElements: ConfigurationElementCollection { التجاوز المحمي ConfigurationElement CreateNewElement() { return new FactoryElement(); } كائن التجاوز المحمي GetElementKey( ConfigurationElement element) { return ((FactoryElement)element).Name; إرجاع BaseGet( name ) كـ FactoryElement } } };
فئة ConfigurationElementCollection هي فئة مجردة، ويجب عليك تنفيذ أسلوب CreateNewElement وأسلوب GetElementKey بشكل صريح.
عقدة <dbFactory>، موروثة من ConfigurationSection
شفرة
public class DbFactorySection: ConfigurationSection { [ConfigurationProperty("default")] public DefaultElement DefaultFactory { get { return this["default"] as DefaultElement } set { this["default"] = value } } [ConfigurationProperty( "factorys"" )] public FactoryElements Factorys { get { return this["factorys"] as FactoryElements } set { this["factorys"] = value;
تم الانتهاء أخيرًا من معالج قسم التكوين. ضع هذه الفئات الأربع في نفس دليل المشروع وقم بتجميعها في ملف DLL. عندما تحتاج إلى الحصول على معلومات التكوين، قم بالرجوع إلى ملف DLL هذا واستخدم قسم DbFactorySection = ConfigurationManager.GetSection( "dbFactory" ) كـ DbFactorySection؛ هل القسم هو ما تريده؟