Jak mohu definovat vlastní web.config úseky s potenciálními dětskými prvky a atributy pro vlastnosti?

hlasů
59

Tyto webové aplikace I vyvíjejí často vyžadují nastavení co-závislé konfigurace a jsou zde i nastavení, která musí změnit, jak jsme pohybovat mezi každé z našich prostředích.

Všechny naše nastavení je právě jednoduché dvojice klíčových hodnot, ale to by bylo užitečné vytvořit vlastní konfigurační sekce, takže je zřejmé, když dvě hodnoty je třeba změnit společně, nebo při nastavení je třeba změnit pro životní prostředí.

Jaký je nejlepší způsob, jak vytvořit vlastní konfigurační sekce, a jsou tam nějaké zvláštní ohledy, jak vydělat při načítání hodnot?

Položena 05/08/2008 v 13:13
zdroj uživatelem
V jiných jazycích...                            


6 odpovědí

hlasů
74

Pomocí atributů, dítě konfiguračních profilů a omezení

Je zde také možnost využít vlastnosti, které se automaticky stará o instalatérské, stejně jako poskytuje možnost snadno přidat omezení.

Zde jsem se představit si příklad z kódu používám sám v jednom ze svých stránek. S omezením I diktovat maximální velikost diskového prostoru, každý uživatel, kdo má právo používat.

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

Toto se nastavuje v souboru web.config jako tak

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

podřízené elementy

Prvek dítě xml pošty je vytvořen v souboru stejné .cs jako v předchozím bodu. Zde jsem přidal omezení na portu. Je-li port přiřazena hodnota není v tomto rozmezí runtime bude stěžovat, když je načten config.

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

Použití

Chcete-li jej pak použít prakticky v kódu, vše, co musíte udělat, je vytvoření instance MailCenterConfigurationObject, bude to automaticky přečíst příslušné oddíly z 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);
}

Zkontrolujte, zda platnost

I již bylo zmíněno, že runtime bude stěžovat, když je konfigurace je načten a některá data nesplňuje pravidla jste nastavili (např MailCenterConfiguration.cs). Mám tendenci chtít, aby co nejdříve znát tyto věci, když mé stránky požáry. Jeden způsob, jak to vyřešit, je nahrát konfiguraci v _Global.asax.cx.Application_Start_, v případě, že konfigurace je neplatný, budete upozorněni na to s pomocí výjimky. Váš web se nespustí a místo toho budou prezentovány informace o výjimce v žluté obrazovka smrti .

Global.asax.cs

protected void Application_ Start(object sender, EventArgs e)
{
    MailCenterConfiguration.Instance;
}
Odpovězeno 05/08/2008 v 23:17
zdroj uživatelem

hlasů
11

Quick'n Dirty:

Nejprve vytvořit ConfigurationSection a ConfigurationElement tříd:

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

Tak ať rámec vědět, jak zacházet s konfigurací třídy v web.config :

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

A ve skutečnosti přidat níže svou vlastní sekci:

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

Pak jej můžete použít v kódu takto:

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

if (configSection != null && configSection.MyStuff != null)
{
    Response.Write(configSection.MyStuff.SomeStuff);
}
Odpovězeno 05/08/2008 v 13:51
zdroj uživatelem

hlasů
4

Tam je vynikající příklad na webu MSDN pomocí ConfigurationCollectiona .NET 4.5 pro vlastní sekce v web.config, který obsahuje seznam konfiguračních položek.

Odpovězeno 19/09/2013 v 16:39
zdroj uživatelem

hlasů
3

Vlastní konfigurace jsou velmi šikovná věc a často aplikace skončit s poptávkou po výsuvným řešení.

For .NET 1.1 naleznete v článku http://aspnet.4guysfromrolla.com/articles/020707-1.aspx

Poznámka: Výše ​​uvedené řešení funguje for .NET 2.0 stejně.

NET 2.0 konkrétním řešení, naleznete v článku http://aspnet.4guysfromrolla.com/articles/032807-1.aspx

Odpovězeno 13/02/2009 v 14:45
zdroj uživatelem

hlasů
2

Tuto operaci lze provést pomocí sekce Psovodi. K dispozici je základní přehled o tom, jak psát jeden po http://www.codeproject.com/KB/aspnet/ConfigSections.aspx však odkazuje na App.config což by bylo skoro stejné jako psaní jeden pro použití v web. config. To vám umožní, aby v podstatě mít svůj vlastní XML strom v konfiguračním souboru a dělat některé pokročilejší nastavení.

Odpovězeno 05/08/2008 v 13:25
zdroj uživatelem

hlasů
1

Nejjednodušší způsob, který jsem zjistil, používá část appSettings .

  1. Přidat do Web.config následující:

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

  2. Přístup z kódu

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

Odpovězeno 04/02/2017 v 17:59
zdroj uživatelem

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