Hogyan határozzák meg az egyéni web.config szakaszok potenciális gyermek elemek és attribútumok az ingatlan?

szavazat
59

A webes alkalmazások fejlesztése én gyakran igényelnek co-függő beállításokat és ott is a beállításokat, hogy meg kell változtatni, ahogy haladunk az egyes egymást a környezetünkben.

Minden az éppen egyszerű kulcs érték párok, de hasznos lenne, hogy egyéni config szakaszok úgy, hogy nyilvánvaló, ha a két érték kell változtatni együtt, vagy ha a beállításokat kell változtatni a környezetet.

Mi a legjobb módja annak, hogy hozzanak létre egyedi config szakaszok és vannak-e olyan speciális szempontok, hogy amikor az értékek kikeresését?

A kérdést 05/08/2008 13:13
a forrás felhasználó
Más nyelveken...                            


6 válasz

szavazat
74

Attribútumok segítségével, gyermek config szakaszok és korlátok

Ott van még a lehetőségét, hogy mely attribútumok automatikusan gondoskodik a vízvezeték, valamint biztosítja a képességét, hogy könnyen hozzá korlátok.

Én itt közölt egy példát kódot használom magam egyik telek. A korlát azt diktálják a maximális mennyiségű lemezterületet bármely felhasználó által használható.

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; }
        }
    }
}

Ez úgy van beállítva, mint oly web.config

<configSections>
    <!-- Mailcenter configuration file -->
    <section name="mailCenter" type="Ani.MailCenterConfiguration" requirePermission="false"/>
</configSections>
...
<mailCenter userDiskSpace="25000">
    <mail
     host="my.hostname.com"
     port="366" />
</mailCenter>

Gyermek elemek

A gyermek XML elem mail jön létre az azonos .cs fájlt a fentieket. Itt adtam megszorítások a port. Ha a port kap értéket nem ebben a tartományban a futási fog panaszkodni, ha a config van betöltve.

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; }
        }

Használat

Ahhoz, akkor használd gyakorlatilag kódot, mindössze annyit kell tennie, hogy a példányosításához MailCenterConfigurationObject, akkor ez automatikusan olvassa el a megfelelő metszetet web.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);
}

Ellenőrizzük érvényesség

Azt már említettük, hogy a futási fog panaszkodni, ha a konfiguráció terhelt és néhány adat nem felel meg a szabályoknak beállította (pl MailCenterConfiguration.cs). Én inkább szeretnék tudni ezeket a dolgokat, a lehető leghamarabb, amikor a helyszínen tűz ki. Az egyik módja annak, hogy megoldja ezt a konfiguráció betöltéséhez a _Global.asax.cx.Application_Start_, ha a konfiguráció érvénytelen akkor értesítést ennek a segítségével egy kivétel. A site nem indul, és ahelyett, akkor be kell mutatni a részletes információkat, kivéve a sárga képernyő a halál .

Global.asax.cs

protected void Application_ Start(object sender, EventArgs e)
{
    MailCenterConfiguration.Instance;
}
Válaszolt 05/08/2008 23:17
a forrás felhasználó

szavazat
11

Quick'n Dirty:

Először készítse el ConfigurationSection és ConfigurationElement osztályok:

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), "<UNDEFINED>");

        this.Properties.Add(_SomeStuff);
    }

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

Akkor hagyja, hogy a keret tudja, hogyan kell kezelni a konfigurációs osztályok web.config :

<configuration>
  <configSections>
    <section name="MyStuffSection" type="MyWeb.Configuration.MyStuffSection" />
  </configSections>
  ...

És valóban hozzá saját szakaszt alább:

  <MyStuffSection>
    <MyStuff SomeStuff="Hey There!" />
  </MyStuffSection>

Akkor tudod használni azt a kódot, így:

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

if (configSection != null && configSection.MyStuff != null)
{
    Response.Write(configSection.MyStuff.SomeStuff);
}
Válaszolt 05/08/2008 13:51
a forrás felhasználó

szavazat
4

Van egy kiváló példa az MSDN használatával ConfigurationCollectionés a .NET 4.5 egyedi szakaszok web.config hogy van egy listája a config terméket.

Válaszolt 19/09/2013 16:39
a forrás felhasználó

szavazat
3

Az egyéni konfiguráció elég hasznos dolog, és gyakran alkalmazások végén igény egy kihúzható megoldást.

NET 1.1 olvassa a cikket http://aspnet.4guysfromrolla.com/articles/020707-1.aspx

Megjegyzés: A fenti megoldás működik .NET 2.0 is.

NET 2.0 egyedi megoldást, kérjük, olvassa el a cikket http://aspnet.4guysfromrolla.com/articles/032807-1.aspx

Válaszolt 13/02/2009 14:45
a forrás felhasználó

szavazat
2

Tudod Ehhez § vitelével. Van egy alapvető áttekintést, hogyan kell írni egyet http://www.codeproject.com/KB/aspnet/ConfigSections.aspx azonban arra utal, hogy app.config ami nagyjából ugyanaz, mint beírni egy használható interneten. config. Ez lehetővé teszi, hogy lényegében a saját XML fa a konfigurációs fájlban, és nem néhány fejlettebb konfigurációt.

Válaszolt 05/08/2008 13:25
a forrás felhasználó

szavazat
1

A legegyszerűbb módszer, amit én találtam, használja appSettings részén .

  1. Hozzá Web.config a következő:

    <appSettings>
        <add key="MyProp" value="MyVal"/>
    </appSettings>
    

  2. Hozzáférés a kódot

    NameValueCollection appSettings = ConfigurationManager.AppSettings;
    string myPropVal = appSettings["MyProp"];
    

Válaszolt 04/02/2017 17:59
a forrás felhasználó

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more