Unlimited Plugins, WordPress themes, videos & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Code
  2. ASP.NET

كيفية إضافة إعدادات التكوين المخصصة لتطبيق.NET (ASP)

by
Difficulty:AdvancedLength:LongLanguages:

Arabic (العربية/عربي) translation by Kaso Toluppa (you can also view the original English article)

منذ إصداره ، نظرت تطبيقات ASP.NET ومكوناتها إلى ملف web.config لتحميل أي إعدادات يحتاجون إلى تشغيلها. ومع ذلك ، فإن إضافة إعدادات مخصصة لإضافة المرونة والمتانة إلى أحد التطبيقات أو المكونات ليس بالأمر المستقيم مثلما يرغب في ذلك. هذا المقال يعلمك كيفية كتابة الفئات الضرورية للتعامل مع عناصر التكوين XML واستخدام الإعدادات التي تحتوي ضمن التعليمات البرمجية الخاصة بك.

إعادة نشر البرنامج التعليمي

كل بضعة أسابيع ، نرجع إلى بعض مشاركات القراء المفضلة لدينا من خلال تاريخ الموقع. تم نشر هذا البرنامج التعليمي لأول مرة في نوفمبر 2012

يوفر .NET Framework مجموعة متنوعة من الإعدادات التي يمكن تكوينها داخل web.config لتعديل سلوك مكون مضمّن أو أكثر داخل التطبيق. بالنسبة إلى بعض المطورين ، يعد الالتزام فقط بالإعدادات التي يوفرها .NET Framework كافيًا. لكن العديد من المطورين يجدون أنهم بحاجة إلى التحكم في مجموعة أكبر من الإعدادات - إما للمكونات (التي كتبتها بنفسها أو لطرف ثالث) ، أو مجرد مجموعة من القيم يجدون أنفسهم يستخدمونها في جميع أنحاء التطبيق الخاص بهم.

يسمح لك ملف web.config بتعيين إعدادات مخصصة مع عنصر ، ولكنه لا يسمح بأي شيء بخلاف أزواج المفاتيح / القيم البسيطة. يعد عنصر XML التالي مثالاً على أحد الإعدادات الموجودة في :

من المؤكد أن إعدادات المفتاح / القيمة يمكن أن تكون مفيدة في العديد من الظروف ، ولكن إعدادات ببساطة ليست مرنة بما يكفي للمكونات أو الإعدادات القوية أو المعقدة.

والحمد لله، Microsoft يمكن المطورين من كتابة فصول إضافة الوصول المبرمج إلى إعدادات التكوين المخصصة الواردة ضمن web.config.


مقطع التكوين

يتم تصنيف الإعدادات داخل web.config إلى أقسام التكوين. على سبيل المثال ، تنتمي الإعدادات الموجودة داخل المقطع إلى إعدادات ASP.NET للتطبيق الخاص بك. يمكنك تغيير نظام المصادقة من التطبيق الخاص بك، وكذلك إضافة أو إزالة معالجات HTTP أداء مهام محددة لأنواع معينة من الملفات. <system.webServer></system.webServer> قسم يتيح لك التحكم العديد من الإعدادات على IIS7 دون إمكانية الوصول المباشر إلى IIS7.

مطلوب قسم التكوين من كافة الإعدادات غير المتضمنة في عنصر . لذلك من الأفضل تصميم بنية XML لإعدادات التكوين قبل كتابة أي كود.

التهيئة المستخدمة كمثال في هذا البرنامج التعليمي هي للمكون الذي يقوم باسترداد موجز RSS أو Atom. لا يقوم بأي تحليل ، حيث أن هذا خارج نطاق هذا البرنامج التعليمي. بدلاً من الثابت ترميز قائمة موجز ويب لاسترداد، تبدو المكون لتكوين تحتوي على أسماء وعناوين Url من الأعلاف لاسترداد. العنصر يسمى فيدريتريفير، وبنية XML المطلوب للتكوين الخاص يبدو مثل هذا:

يحدد عنصر بواسطة قسم التكوين. كقاعدة عامة ، يجب أن يشارك قسم التكوين اسم المكون الذي تم تصميمه له. <feedRetriever></feedRetriever> العناصر فقط من الأطفال <feeds></feeds> عنصر. أعتقد هذا العنصر كمجموعة من موجز ويب لأنه يحتوي على عدة <add></add> العناصر (التفكير الأسلوب Add() الذي يكون معظم مجموعة الكائنات). قد يبدو اختيار استخدام عنصر "إضافة" غريبًا في البداية ، ولكن يتم استخدام العنصر في غالبية أقسام التهيئة المضمنة. لذا ، فإن استخدامه هنا يتبع ببساطة ممارسات التصميم التي وضعتها Microsoft.

وهذه <add></add> عناصر تستخدم اسم وعنوان url، وسمات ذاكرة التخزين المؤقت لتعيين إعدادات معينة لكل تغذية. وبطبيعة الحال، سمات اسم وعنوان url المطلوب، ولكن ليس سمة ذاكرة التخزين المؤقت، وينبغي الافتراضي إلى true.

التكوين أعلاه بسيط. يمكن تعديل عنصر ليحتوي على طفل آخر ، يسمى ، لاحتواء الإعدادات التي يمكن تطبيقها على كل الخلاصات. يمكن أيضًا استخدام عناصر لسمات إضافية ، مثل cacheTime و requestFrequency ، للتحكم في مدة تخزين الخلاصة مؤقتًا وعدد مرات طلبها من المضيف البعيد. والقيد الوحيد إلى القابلية للتوسعة و configurability هو خيالك.


كتابة معالج التكوين

بعد تصميم هيكل XML ، فإن الخطوة التالية هي كتابة معالج التكوين لمعالجة الإعدادات المحددة في XML. المعالج هو في المقام الأول فئة ترث من System.Configuration.ConfigurationSection ، ولكنها تتضمن أيضًا استخدام فئات أخرى - مثل الفئات المشتقة من System.Configuration.ConfigurationElement و System.Configuration.ConfigurationElementCollection.

وتمثل فئات استناداً إلى كونفيجوراتيونيليمينت العناصر الفردية؛ أنها لبنة من مقطع التكوين. الأنواع التي تنبع من كونفيجوراتيونيليمينتكوليكشن ببساطة تمثل العناصر التي تحتوي على نوع واحد أو أكثر من العناصر. مضغوط التكوين المذكورة أعلاه ، يتم تمثيل العنصر بفئة مشتقة من ConfigurationElementCollection ، ويتم تمثيل عناصر بواسطة فئة تعتمد على ConfigurationElement


تمثل <add> </add> عنصر

سوف تبدأ بالعنصر من خلال تمثيله بفئة تسمى FeedElement (مشتقة من ConfigurationElement). توجد هذه الفئة والفصول المتعلقة بالتهيئة المستقبلية في مساحة الاسم FeedRetriever.Configuration.

يعمل كل كائن ConfigurationElement كمفهرس لمجموعته الداخلية لقيم الخاصية. هذه المجموعة الداخلية ، مع سمات .NET ، تمكنك من تعيين سمات العنصر لخصائص فئة FeedElement.

التعليمة البرمجية التالية هي التعليمات البرمجية الكاملة لفئة فيديليمينت:

تعمل فئة ConfigurationElement كمفهرس لمجموعة أساسية من خصائص التهيئة (ومن هنا جاءت ترميز المفهرس لهذا [keyValue]). باستخدام هذه الكلمة الرئيسية والوصول إلى الخاصية الأساسية باستخدام مفتاح سلسلة ، يمكنك الحصول على قيمة الخاصية وتعيينها دون الحاجة إلى حقل خاص لاحتواء تلك البيانات. جمع الممتلكات الأساسية تخزين البيانات كنوع كائن؛ ولذلك، لديك لتحويل القيمة كالنوع المناسب إذا كنت تريد أن تفعل أي شيء معها.

تم تصميم الخصائص التي تمثل سمات XML بسمات ConfigurationPropertyAttribute. المعلمة الأولى من سمة ConfigurationPropertyAttribute هي اسم سمة XML الموجودة داخل العنصر . بعد المعلمة الأولى مجموعة من أي عدد من المعلمات المسماة. القائمة التالية قائمة كاملة للمعلمات ممكن:

  • DefaultValue - الحصول على القيمة الافتراضية للخاصية المزينة أو تعيينها. هذه المعلمة
    غير مطلوب.
  • IsDefaultCollection - الحصول على أو تعيين قيمة منطقية تشير إلى ما إذا كانت الخاصية
    يتم جمع الخاصية الافتراضية لخاصية مزينة. هذه المعلمة
    غير مطلوب ، والافتراضي هو خطأ.
  • إيسكيي--الحصول على أو تعيين قيمة منطقية تشير إلى ما إذا كانت هذه الخاصية خاصية مفتاح
    لخاصية العنصر المزين. هذه المعلمة غير مطلوبة ، والافتراضية
    القيمة false.
  • IsRequired - يحصل على أو يحدد قيمة منطقية تشير إلى ما إذا كان العنصر المزين
    خاصية مطلوب. هذه المعلمة غير مطلوبة، والقيمة الافتراضية false.

القيمة الافتراضية "http: // localhost" لخاصية Url ليست خطأ. كما يمنحك .NET Framework القدرة على تزيين الخصائص مع سمات المدقق - مثل RegexStringValidatorAttribute decorating the Url property. هذا المدقق يأخذ قيمة الخاصية Url والتحقق من أنها ضد التعبير العادية المقدمة إلى السمة؛ ومع ذلك، فإنه أيضا صحة الخاصية Url قبل أنه يحتوي على البيانات من عنصر XML. القيمة الافتراضية لخاصية Url هي سلسلة فارغة عند إنشاء كائن FeedElement لأول مرة. سلسلة فارغة لا التحقق من صحة ضد التعبير العادية المقدمة، حيث يلقي المدقق ArgumentException قبل أن يتم تحميل أية بيانات من ملف XML.

هناك نوعان من الحلول الممكنة لهذه المشكلة. الطريقة الأولى تعدل التعبير العادي للسماح بسلاسل فارغة. يعيّن الأسلوب الثاني قيمة افتراضية إلى الخاصية. لا يهم في هذه الحالة بالذات. حتى مع القيمة الافتراضية ، لا تزال سمة url سمة مطلوبة في العنصر - يعرض التطبيق ConfigurationErrorsException إذا كان عنصر لا يحتوي على سمة url.

وهناك عدة سمات المدقق الأخرى في مساحة الاسم System.Configuration للتحقق من صحة البيانات التي تم تعيينها إلى خصائص وسمات XML هي خريطة ل. فيما يلي سرد كافة السمات المصادقة ضمن مساحة الاسم System.Configuration:

وباستثناء CallbackValidatorAttribute ، لا يلزم إنشاء كائنات مصادقة مطابقة لاستخدامها مع سمات المدقق. وقت التشغيل .NET بإنشاء كائنات المصادقة المناسبة لك ، وتحتوي السمات على المعلمات المطلوبة لتكوين كائنات المصادقة.

هذا بت صغيرة من التعليمات البرمجية هو كل ما مطلوب للفرد تمثل برمجياً <add></add> العناصر. والخطوة التالية هي كتابة فئة تمثل <feeds></feeds> عنصر.


كتابة فئة جمع العنصر

تمثيل XML لعنصر هو مجموعة من عناصر الخلاصة. وبالمثل ، فإن التمثيل البرمجي لعنصر هو مجموعة من كائنات FeedElement. هذه الفئة، ودعا فيديليمينتكوليكشن، مشتقة من فئة كونفيجوراتيونيليمينتكوليكشن مجردة.

تحتوي فئة ConfigurationElementCollection على العديد من الأعضاء ، ولكن تم وضع علامة على اثنين فقط كمختفي. وبالتالي ، فإن أبسط تطبيق ConfigurationElementCollection له طريقتين:

  • CreateNewElement()--إنشاء كائن كونفيجوراتيونيليمينت جديد (فيديليمينت في هذا
    حالة).
  • GetElementKey () - يحصل على مفتاح العنصر لعنصر تكوين محدد (
    اسم الخاصية للكائنات فيديليمينت في هذه الحالة).

مع وضع ذلك في الاعتبار ، قم بعرض الكود الكامل لفئة FeedElementCollection أدناه:

يضيف ConfigurationCollectionAttribute فئة المجموعة هذه. المعلمة الأولى إلى السمة هي كائن نوع - نوع العناصر يحتوي على المجموعة. وفي هذه الحالة، من نوع فيديليمينت. بعد نوع المعلمة عدة تسمى معلمات يمكنك تمرير إلى السمة. وترد هذه أدناه:

  • AddItemName - لتعيين اسم عنصر التكوين . فمثلا،
    إعداد هذا سيتطلب "تغذية" <add></add> العناصر في
    التكوين إلى .
  • كليريتيمسنامي-تعيين الاسم <clear></clear> عنصر التكوين (المستخدمة
    لمسح كافة العناصر من المجموعة).
  • RemoveItemName - لتعيين اسم عنصر التكوين (يستخدم
    لإزالة عنصر من المجموعة).

يؤدي ترك هذه المعلمات المسماة فارغة إلى تعيينها افتراضيًا إلى ، ، .


كتابة الفئة فيدريتريفيرسكشن

الفئة الأخيرة ، تسمى FeedRetrieverSection ، مشتقة من ConfigurationSection وتمثل عنصر . هذا هو أبسط فئة من فئات التكوين ، حيث أن المتطلب الوحيد الذي يجب أن يفي به هو توفير وصول برمجي إلى عنصر (FeedElementCollection).

أنها خاصية واحدة، من نوع فيديليمينتكوليكشن، ويسمى إس، مزين كونفيجوراتيونبروبيرتياتريبوتي-رسم الخرائط <feeds></feeds> عنصر.


تعديل web.config

مع اكتمال معالج التكوين ، يمكنك إضافة العناصر المناسبة إلى web.config. يمكن لقسم أن يذهب إلى أي مكان في الملف طالما أنه منحدر مباشر لعنصر الجذر (عنصر <التكوين />). يؤدي وضعه داخل قسم تهيئة آخر إلى حدوث خطأ.

الخطوة التالية هي إضافة <section></section> عنصر تابع إلى <configSections> </configSections>. <section></section> عنصر سمات اثنين من الفائدة:

  • name - اسم عنصر قسم التكوين. في هذه الحالة ، الاسم هو feedRetriever.
  • نوع-الاسم المؤهل للفئة المرتبطة بالقسم، وإذا لزم الأمر،
    اسم التجميع الموجود في الفئة. في هذه الحالة ، الاسم المؤهل
    هو FeedRetriever.Configuration.FeedRetrieverSection. إذا كان يقيم في منفصلة
    التجميع ، فإن سمة type ستحتوي على قيمة "FeedRetriever.Configuration.FeedRetrieverSection ،
    <assemblyName>"، حيث <assemblyName>هو اسم الجمعية</assemblyName></assemblyName>
    دون أقواس زاوية.

العنصر التالي هو ما تضيفه إلى ملف web.config ، تحت ، عندما لا تتواجد فئات التكوين في تجميع منفصل (كما هو الحال في تنزيل الكود):

والآن تكوين التطبيق الخاص بك بشكل صحيح استخدام فئات فيدريتريفيرسيكشن، وفيديليمينتكوليكشن، وفيديليمينت بمنح لك الوصول البرمجي إلى الإعدادات المخصصة الواردة ضمن <feedRetriever></feedRetriever> مقطع التكوين في الملف web.config. إذن كيف تصل إلى هذه الإعدادات من داخل شفرتك؟


الوصول إلى بيانات التكوين من التعليمات البرمجية

يحتوي مساحة الاسم System.Configuration على فئة ثابتة تسمى ConfigurationManager. إذا كنت تستخدم المقطع لإيواء سلاسل الاتصال ، فأنت على الأقل على دراية بـ ConfigurationManager. أنها طريقة تسمى GetSection()، الذي يقبل سلسلة تحتوي على اسم مقطع التكوين لاسترداد. التعليمة البرمجية التالية يوضح هذا (تفترض استخدام System.Configuration في الجزء العلوي من ملف التعليمات البرمجية):

إرجاع الأسلوب GetSection () قيمة نوع الكائن ، لذلك يجب أن يتم إرسالها إلى أي نوع معالج لهذا المقطع. يسترد هذا الرمز المقطع المسمى feedRetriever ويلقي النتيجة كـ FeedRetrieverSection. بمجرد الحصول على الكائن ، يمكنك البدء في الوصول إلى بيانات التكوين برمجيًا.

لإعطائك فكرة عن كيف يمكن استخدام إعدادات التكوين داخل المكون أو التطبيق الخاص بك، التعليمة البرمجية التالية تنفيذ أساسية جداً لعنصر فيدريتريفير.

أولاً ، يتم تعريف متغير ثابت يسمى _Config ، من نوع FeedRetreiverSection وتعيين قيمة عن طريق استدعاء ConfigurationManager.GetSection (). جعل متغير ثابت هو اختيار التصميم. القيام بذلك، كافة أعضاء الفئة، أما مثيل أو ثابت، سيكون الوصول إلى إعدادات التكوين دون الحاجة إلى إجراء مكالمات متعددة إلى GetSection().

بمجرد استرداد معالج المقطع مع GetSection () ، يكون لديك حق الوصول الكامل إلى الكائنات التي تم إنشاؤها من فئات معالج الخاص بك. السطر الأول من GetFeeds () هو لكل حلقة الحلقات خلال كافة الكائنات FeedElement المحتواة مع الكائن FeedElementCollection التي تم إرجاعها بواسطة الخاصية تغذية. وهذا يتيح لك الوصول مباشرة إلى هذه الكائنات فيديليمينت--مما يجعل من السهل الوصول إلى تغذية كل اسم وعنوان URL، وإعدادات ذاكرة التخزين المؤقت.

ثناء كل تكرار للحلقة ، تقوم الطريقة بإجراء طلب باستخدام خاصية عنوان الكائن الخاص بـ FeedElement. إذا كان الطلب ناجحًا ، فسيتم استرداد بيانات الخلاصة وتخزينها في متغير feedData. ثم يتحقق التعليمة البرمجية الخاصية ذاكرة التخزين المؤقت للكائن فيديليمينت تحديد ما إذا كان سيتم تخزين الأعلاف. يتضمن التخزين المؤقت للتغذية إنشاء اسم ملف باستخدام خاصية اسم الكائن FeedElement والتاريخ والوقت الحاليين. ثم يقوم كائن StreamWriter بإنشاء الملف وكتابة بيانات الخلاصة إليه.

كما ترون، باستخدام فئات معالج مقطع التكوين مفتاح لاسترجاع واستخدام إعدادات مخصصة المقيمين في الملف web.config. أنه يتطلب بالتأكيد مزيدا من الوقت والجهد منك، ولكنه بالتأكيد يجعل التطبيق أو المكون الخاص بك أسهل بكثير لتكوين لنفسك ومطورين آخرين.


بيع مكونات .NET على CodeCanyon!


CodeCanyon

هل تعلم أن لدينا فئة.NET على CodeCanyon. إذا كنت ديف.NET مهرة، لماذا لا تبيع البرامج النصية/المكونات/عناصر التحكم الخاصة بك ككاتب، وكسب 40-70% من كل عملية بيع؟

Advertisement
Advertisement
Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.