मैं संभावित वेब तत्वों और गुणों के गुणों के साथ कस्टम web.config खंडों को कैसे परिभाषित करूं?

मेरे द्वारा विकसित किए जाने वाले वेब एप्लिकेशन को अक्सर सह-निर्भर कॉन्फ़िगरेशन सेटिंग्स की आवश्यकता होती है और ऐसी सेटिंग्स भी होती हैं जिन्हें हम अपने प्रत्येक वातावरण के बीच स्थानांतरित करते हैं।

हमारी सभी सेटिंग्स वर्तमान में सरल कुंजी मान जोड़े हैं लेकिन कस्टम कॉन्फ़िगरेशन अनुभाग बनाने के लिए यह उपयोगी होगा ताकि यह स्पष्ट हो कि दो मानों को एक साथ बदलने की आवश्यकता है या जब वातावरण को पर्यावरण के लिए बदलने की आवश्यकता है।

कस्टम कॉन्फ़िगरेशन अनुभाग बनाने का सबसे अच्छा तरीका क्या है और क्या मूल्यों को पुनर्प्राप्त करते समय कोई विशेष विचार है?

0
जोड़ा संपादित
विचारों: 1

5 उत्तर

विशेषताएँ, बाल कॉन्फ़िगरेशन अनुभाग और बाधाओं का उपयोग करना

विशेषताओं का उपयोग करने की संभावना भी होती है जो स्वचालित रूप से नलसाजी का ख्याल रखती है, साथ ही आसानी से बाधाओं को जोड़ने की क्षमता प्रदान करती है।

मैं यहां कोड से एक उदाहरण प्रस्तुत करता हूं जिसका उपयोग मैं अपनी साइटों में से किसी एक में करता हूं। एक बाधा के साथ मैं किसी भी उपयोगकर्ता को उपयोग करने की अनुमति देने वाले डिस्क स्थान की अधिकतम मात्रा निर्धारित करता हूं।

MailCenterConfiguration.cs:

namespace Ani {

    public sealed class MailCenterConfiguration : ConfigurationSection
    {
        [ConfigurationProperty("userDiskSpace", IsRequired = true)]
        [IntegerValidator(MinValue = 0, MaxValue = 1000000)]
        public int UserDiskSpace
        {
            get { return (int)base["userDiskSpace"]; }
            set { base["userDiskSpace"] = value; }
        }
    }
}

यह web.config में स्थापित है


    <!-- Mailcenter configuration file -->
    
...

    

बाल तत्व

बच्चे xml तत्व मेल उसी .cs फ़ाइल में उपरोक्त के रूप में बनाया गया है। यहां मैंने बंदरगाह पर बाधाओं को जोड़ा है। यदि बंदरगाह को इस मान में एक मान निर्दिष्ट नहीं किया गया है तो कॉन्फ़िगरेशन लोड होने पर रनटाइम शिकायत करेगा।

MailCenterConfiguration.cs:

public sealed class MailCenterConfiguration : ConfigurationSection
{
    [ConfigurationProperty("mail", IsRequired=true)]
    public MailElement Mail
    {
        get { return (MailElement)base["mail"]; }
        set { base["mail"] = value; }
    }

    public class MailElement : ConfigurationElement
    {
        [ConfigurationProperty("host", IsRequired = true)]
        public string Host
        {
            get { return (string)base["host"]; }
            set { base["host"] = value; }
        }

        [ConfigurationProperty("port", IsRequired = true)]
        [IntegerValidator(MinValue = 0, MaxValue = 65535)]
        public int Port
        {
            get { return (int)base["port"]; }
            set { base["port"] = value; }
        }

का प्रयोग करें

इसके बाद इसे व्यावहारिक रूप से कोड में उपयोग करने के लिए, आपको केवल मेलकेंटर कॉन्फ़िगरेशन ऑब्जेक्ट को तत्काल करना है, यह स्वचालित रूप से वेब.config से संबंधित अनुभागों को पढ़ेगा।

MailCenterConfiguration.cs

private static MailCenterConfiguration instance = null;
public static MailCenterConfiguration Instance
{
    get
    {
        if (instance == null)
        {
            instance = (MailCenterConfiguration)WebConfigurationManager.GetSection("mailCenter");
        }

        return instance;
    }
}

AnotherFile.cs

public void SendMail()
{
    MailCenterConfiguration conf = MailCenterConfiguration.Instance;
    SmtpClient smtpClient = new SmtpClient(conf.Mail.Host, conf.Mail.Port);
}

वैधता की जांच करें

मैंने पहले उल्लेख किया था कि कॉन्फ़िगरेशन लोड होने पर रनटाइम शिकायत करेगा और कुछ डेटा आपके द्वारा सेट किए गए नियमों का पालन नहीं करते हैं (उदा। MailCenterConfiguration.cs में)। जब भी मेरी साइट आग लगती है, मैं जितनी जल्दी हो सके इन चीजों को जानना चाहता हूं। इसे हल करने का एक तरीका _Global.asax.cx.Aplication_Start_ में कॉन्फ़िगरेशन लोड करता है, अगर कॉन्फ़िगरेशन अमान्य है तो आपको अपवाद के माध्यम से इसकी सूचना दी जाएगी। आपकी साइट शुरू नहीं होगी और इसके बजाय आपको मौत की पीला स्क्रीन

Global.asax.cs

protected void Application_ Start(object sender, EventArgs e)
{
    MailCenterConfiguration.Instance;
}
0
जोड़ा
यदि आप एकाधिक बाल तत्वों की अपेक्षा करते हैं तो आप कोड कैसे बदलेंगे?
जोड़ा लेखक Kevin Le - Khnle, स्रोत

क्विक डर्टी:

सबसे पहले अपना कॉन्फ़िगरेशनसेक्शन और कॉन्फ़िगरेशन एलिमेंट कक्षाएं बनाएं:

public class MyStuffSection : ConfigurationSection
{
    ConfigurationProperty _MyStuffElement;

    public MyStuffSection()
    {
        _MyStuffElement = new ConfigurationProperty("MyStuff", typeof(MyStuffElement), null);

        this.Properties.Add(_MyStuffElement);
    }

    public MyStuffElement MyStuff
    {
        get
        {
            return this[_MyStuffElement] as MyStuffElement;
        }
    }
}

public class MyStuffElement : ConfigurationElement
{
    ConfigurationProperty _SomeStuff;

    public MyStuffElement()
    {
        _SomeStuff = new ConfigurationProperty("SomeStuff", typeof(string), "");

        this.Properties.Add(_SomeStuff);
    }

    public string SomeStuff
    {
        get
        {
            return (String)this[_SomeStuff];
        }
    }
}

फिर ढांचे को जानें कि web.config में अपनी कॉन्फ़िगरेशन कक्षाओं को कैसे प्रबंधित करें:


  
    
  
  ...

और वास्तव में नीचे अपना स्वयं का अनुभाग जोड़ें:

  
    
  

फिर आप इसे अपने कोड में उपयोग कर सकते हैं:

MyWeb.Configuration.MyStuffSection configSection = ConfigurationManager.GetSection("MyStuffSection") as MyWeb.Configuration.MyStuffSection;

if (configSection != null && configSection.MyStuff != null)
{
    Response.Write(configSection.MyStuff.SomeStuff);
}
0
जोड़ा

आप इसे अनुभाग हैंडलर के साथ पूरा कर सकते हैं। http://www.codeproject.com पर एक को लिखने का एक मूल अवलोकन है /KB/aspnet/ConfigSections.aspx हालांकि यह app.config को संदर्भित करता है जो web.config में उपयोग के लिए एक लिखने जैसा ही होगा। यह आपको कॉन्फ़िगरेशन फ़ाइल में अनिवार्य रूप से अपना स्वयं का एक्सएमएल पेड़ रखने की अनुमति देगा और कुछ और उन्नत कॉन्फ़िगरेशन करेगा।

0
जोड़ा

ConfigurationCollection का उपयोग करके एक उत्कृष्ट MSDN पर उदाहरण है और .NET 4.5 web.config में कस्टम अनुभागों के लिए जिसमें कॉन्फ़िगरेशन आइटम की एक सूची है।

0
जोड़ा

The most simple method, which I found, is using appSettings section.

  1. Add to Web.config the following:

    
        
    
    
  2. Access from your code

    NameValueCollection appSettings = ConfigurationManager.AppSettings;
    string myPropVal = appSettings["MyProp"];
    
0
जोड़ा