Nasıl potansiyel çocuk elemanları ile özel web.config bölümlerini tanımlamak ve özellikleri için niteliklerini mı?

oy
59

Ben geliştirmek web uygulamaları genellikle eş-bağımlı yapılandırma ayarları gerektirir ve biz ortamların her biri arasında hareket ederken değiştirmek zorunda ayarlar da vardır.

Tüm ayarlar şu anda basit anahtar değer çiftleri vardır ama iki değer birlikte değiştirmek gerektiğinde bu açıktır böylece özel yapılandırma bölümleri oluşturmak için yararlı olacağını veya ayarlar bir ortam için değiştirmek gerektiğinde.

özel yapılandırma bölümleri oluşturmak ve değerleri alınırken yapmak için herhangi bir özel noktalar vardır için en iyi yolu nedir?

Oluştur 05/08/2008 saat 13:13
kaynak kullanıcı
Diğer dillerde...                            


6 cevaplar

oy
74

özelliklerini, çocuk yapılandırma bölümleri ve kısıtlamaları kullanma

otomatik kolayca kısıtlamaları ekleme olanağı sağlamanın yanı sıra, sıhhi tesisat ilgilenir özelliklerini kullanma imkanı da vardır.

Burada benim sitelerinden biri kendimi kullanmak koddan bir örnek sunuyoruz. Bir kısıtlama ile herhangi bir kullanıcı kullanmak için izin verilen disk alanının maksimum miktarda dikte.

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

Bu yüzden gibi web.config kurulur

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

Alt öğeler

Çocuk xml elemanı posta yukarıdaki ile aynı .cs dosyasında oluşturulur. Burada bağlantı noktasında kısıtlamalar ekledik. Liman bu aralıkta bir değer atanmışsa yapılandırma yüklendiğinde çalışma zamanı şikayet.

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

kullanım

Daha sonra pratik olarak kodunda kullanmak için yapmanız gereken tek şey MailCenterConfigurationObject örneğini ise, bu olacak otomatik web.config ilgili bölümleri okuyun.

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

geçerliliği için kontrol edin

Daha önce yapılandırma yüklenen ve bazı veriler kurdunuz kurallara uymaması zaman çalışma zamanı (MailCenterConfiguration.cs örn) şikayet edeceğini belirtti. Sitemin ateşlerse zaman en kısa sürede bunları bilmek istiyorum eğilimindedir. Bunu çözmenin bir yolu yapılandırması istisna vasıtası ile bu bildirilecektir geçersizse, _Global.asax.cx.Application_Start_ yapılandırmayı yüklemek olduğunu. Siteniz başlamaz ve onun yerine de ayrıntılı istisna bilgi sunulacaktır ölüm Sarı ekranında .

Global.asax.cs

protected void Application_ Start(object sender, EventArgs e)
{
    MailCenterConfiguration.Instance;
}
Cevap 05/08/2008 saat 23:17
kaynak kullanıcı

oy
11

Quick'n Kirli:

Önce oluşturmak ConfigurationSection ve ConfigurationElement sınıfları:

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

Ardından çerçeve içinde yapılandırma sınıfları nasıl işleneceğini bildirmek web.config :

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

Ve aslında aşağıda kendi bölümünüzü ekleyin:

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

Sonra böylece kodunuzda kullanabilirsiniz:

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

if (configSection != null && configSection.MyStuff != null)
{
    Response.Write(configSection.MyStuff.SomeStuff);
}
Cevap 05/08/2008 saat 13:51
kaynak kullanıcı

oy
4

Mükemmel bir var MSDN'deki örnek kullanarak ConfigurationCollectionve yapılandırma öğeleri listesini alır web.config'de özel bölümler için .NET 4.5.

Cevap 19/09/2013 saat 16:39
kaynak kullanıcı

oy
3

Özel yapılandırma oldukça kullanışlı bir şey vardır ve genellikle uygulamalar uzatılabilen çözüm için talep ile bitirmek.

.NET 1.1 için makaleye bakınız http://aspnet.4guysfromrolla.com/articles/020707-1.aspx

Not: Yukarıdaki çözüm de .NET 2.0 için çalışır.

.NET 2.0 belirli çözüm için makaleye bakınız http://aspnet.4guysfromrolla.com/articles/032807-1.aspx

Cevap 13/02/2009 saat 14:45
kaynak kullanıcı

oy
2

Sen Bölüm işleyicileri ile gerçekleştirebilirsiniz. Bir tane yazma temel bakış vardır http://www.codeproject.com/KB/aspnet/ConfigSections.aspx oldukça fazla web kullanılmak üzere bir yazma ile aynı olacağını App.Config atıfta ancak. yapılandırma. Bu aslında yapılandırma dosyasında kendi XML ağaç var ve biraz daha gelişmiş yapılandırma yapmanızı sağlayacaktır.

Cevap 05/08/2008 saat 13:25
kaynak kullanıcı

oy
1

Buldum en basit yöntem, kullanan appSettings bölüm .

  1. Aşağıdaki Web.config ekle:

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

  2. kodunuzdan Erişim

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

Cevap 04/02/2017 saat 17:59
kaynak kullanıcı

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