2010-05-06 10 views
7

से कॉन्फ़िगरेशन तत्व प्राप्त करना मेरे पास (उम्मीद है) सेटअप कॉन्फ़िगरेशन एलिमेंट्स के रूप में ईमेल के साथ अपने स्वयं के डिज़ाइन का चयन करें। अब क्या? वास्तव में वेब पर खोजने के लिए मुश्किल है। मैं कैसे कर सकता हूं:कॉन्फ़िगरेशन एलिमेंट कोलेक्शन

  1. इसके माध्यम से पुनरावृत्त?

  2. देखें कि कोई विशिष्ट तत्व मौजूद है या नहीं?

  3. एक विशिष्ट तत्व प्राप्त करें?

... दिया:

YourConfigElement config = 
    ConfigurationManager.GetSection("YourSectionName") as YourConfigElement; 

आंशिक जवाब

1.

foreach (X x in config.XCollection) 
      <code here> 

2।

{ 
    if (x.Y == needle) 
    { 
     hasIndeed = true; 
     break; 
    } 
} 

3 के साथ "यहां कोड" को प्रतिस्थापित करें।

{ if (x.Y == needle) 
     cameUpWith = x; 
     break; 
} 

छोटी गंध के साथ "यहां कोड" को प्रतिस्थापित करें।

उत्तर

2

मैं पूरी तरह समझ में नहीं आता है कि आपके मुद्दे हैं - लेकिन मूल रूप से, अगर आप एक कस्टम विन्यास तत्व है, तो आप की तरह कुछ का उपयोग कर पुन: प्राप्त करने कि कॉन्फ़िग फ़ाइल से सक्षम होना चाहिए:

YourConfigElement config = 
    ConfigurationManager.GetSection("YourSectionName") as YourConfigElement ; 

एक बार जब आप अपना कॉन्फ़िगरेशन तत्व रखें, आप जो भी चाहें उसके साथ कर सकते हैं - आप उन सभी चीजों को लागू कर सकते हैं जिन्हें आपने पूछा - एक तत्व का अस्तित्व जांचें, एक विशिष्ट तत्व आदि प्राप्त करें।

आपको जॉन रिस्टा के तीन भाग को भी देखना चाहिए अधिक जानकारी के लिए CodeProject पर .NET 2.0 कॉन्फ़िगरेशन पर श्रृंखला - शायद वे लेख आपको अनलॉक करने में मदद करेंगे उर config "चुनौती" ;-)

अत्यधिक की सिफारिश की है, अच्छी तरह से लिखा और अत्यंत उपयोगी!

और यदि आपने इसे पहले से नहीं खोजा है - तो कोडप्लेक्स पर एक उत्कृष्ट Configuration Section Designer है जो कॉन्फ़िगरेशन अनुभागों और संग्रहों को एक स्नैप डिज़ाइन करता है और आपके लिए सभी gooey गोंद कोड लिखता है - वास्तव में बहुत आसान!

मार्क

+0

आपके उत्तर के लिए धन्यवाद। मेरे लिए कठिन हिस्सा संग्रह प्रकार है। मैंने # 1 हल किया है लेकिन ऐसा लगता है कि यदि आप एक कुंजी की तलाश में हैं तो एक सुंदर और तेज़ तरीका होना चाहिए। मैं आपके लिंक की जांच करूंगा। – Martin

+1

मैं वास्तव में काफी खुश हूँ। आपके द्वारा सुझाए गए पृष्ठ समान सामग्री के पहले नहीं हैं जिन्हें मैंने देखा है। अब तक मैं संग्रह प्रकारों को परिभाषित करने में कुशल हूं, कॉन्फ़िगरेशन में तत्व जोड़ रहा हूं, लेकिन वास्तव में मेरे कोड में संग्रह का उपयोग कर रहा हूं। यह AsQueryable() विधि का खुलासा करता है। मुझे यकीन है कि यह एक सुराग है, लेकिन बदले में पूछताछ करने योग्य उपयोग के कुछ भी खुलासा नहीं करता है - उदाहरण के लिए, प्राप्त या शामिल है। – Martin

8

तुम क्या चाहते अपने स्वयं के सामान्य ConfigurationElementCollection आधार वर्ग जो IList<T> लागू करता है। इसके बाद आप अपने सभी कॉन्फ़िगरेशन संग्रहों के लिए इसका उत्तराधिकारी बना सकते हैं और कॉन्फ़िगरेशन संग्रह बनाते समय आपको जो काम करना है, उस पर कटौती कर सकते हैं।

public abstract class BaseConfigurationElementCollection<TConfigurationElementType> : ConfigurationElementCollection, IList<TConfigurationElementType> where TConfigurationElementType : ConfigurationElement, IConfigurationElementCollectionElement, new() 
{ 
    protected override ConfigurationElement CreateNewElement() 
    { 
     return new TConfigurationElementType(); 
    } 

    protected override object GetElementKey(ConfigurationElement element) 
    { 
     return ((TConfigurationElementType)element).ElementKey; 
    } 

    public IEnumerator<TConfigurationElement> GetEnumerator() 
    { 
     foreach (TConfigurationElement type in this) 
     { 
      yield return type; 
     } 
    } 

    public void Add(TConfigurationElementType configurationElement) 
    { 
     BaseAdd(configurationElement, true); 
    } 

    public void Clear() 
    { 
     BaseClear(); 
    } 

    public bool Contains(TConfigurationElementType configurationElement) 
    { 
     return !(IndexOf(configurationElement) < 0); 
    } 

    public void CopyTo(TConfigurationElementType[] array, int arrayIndex) 
    { 
     base.CopyTo(array, arrayIndex); 
    } 

    public bool Remove(TConfigurationElementType configurationElement) 
    { 
     BaseRemove(GetElementKey(configurationElement)); 

     return true; 
    } 

    bool ICollection<TConfigurationElementType>.IsReadOnly 
    { 
     get { return IsReadOnly(); } 
    } 

    public int IndexOf(TConfigurationElementType configurationElement) 
    { 
     return BaseIndexOf(configurationElement); 
    } 

    public void Insert(int index, TConfigurationElementType configurationElement) 
    { 
     BaseAdd(index, configurationElement); 
    } 

    public void RemoveAt(int index) 
    { 
     BaseRemoveAt(index); 
    } 

    public TConfigurationElementType this[int index] 
    { 
     get 
     { 
      return (TConfigurationElementType)BaseGet(index); 
     } 
     set 
     { 
      if (BaseGet(index) != null) 
      { 
       BaseRemoveAt(index); 
      } 
      BaseAdd(index, value); 
     } 
    } 
} 

थोड़ा और काम के साथ आप एक शब्दकोश संग्रह भी प्राप्त कर सकते हैं।

संबंधित मुद्दे