如何从C#中的app.config获取一些元素?

时间:2012-08-02 08:20:30

标签: c# c#-4.0 app-config configurationmanager

根据我的 app.config ,我希望能够获取列的元素,如下面第3-5行中的示例所示。我应该如何编写代码才能实现这一目标。如果我需要更改我的app.config - 我会这样做。

1. var bounceProviders = ConfigurationManager.GetSection("BounceProviders") as BounceProvidersSection;
2. var providerColumns = bounceProviders.Providers[0].Columns;
3. var emailColumn = providerColumns.Email;
4. var dateColumn = providerColumns.Date;
5. var messageColumn = providerColumns.Message;

的app.config

<BounceProviders>
  <Providers>
    <Provider Name="p1">        
      <Columns>
          <Email Name="My Email" />
          <Date Name="My Date" />
          <Message Name="My Message" />               
      </Columns>
    </Provider>  
    <Provider Name="p2">
      <Columns />
    </Provider>    
  </Providers>
</BounceProviders>

的ConfigurationSection

public class BounceProvidersSection : ConfigurationSection
{
    [ConfigurationCollection(typeof(ConfigCollection<BounceProviderConfig>), AddItemName = "Provider")]
    [ConfigurationProperty("Providers", IsRequired = true)]
    public ConfigCollection<BounceProviderConfig> Providers
    {
        get { return (ConfigCollection<BounceProviderConfig>)this["Providers"]; }
        set { this["Providers"] = value; }
    }                
}

public class BounceProviderConfig : ConfigurationElement
{
    [ConfigurationProperty("Name", IsRequired = true)]
    public string Name
    {
        get { return (string)this["Name"]; }
        set { this["Name"] = value; }
    }            
}

ConfigCollection

public class ConfigCollection<T> : ConfigurationElementCollection
        where T : ConfigurationElement, new()
{        
    protected override ConfigurationElement CreateNewElement()
    {
        return new T();
    }

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

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

    new public T this[string Name]
    {
        get
        {
            return ( T )BaseGet( Name );
        }
    }
}

SDF

1 个答案:

答案 0 :(得分:1)

我想通了

public class BounceProvidersSection : ConfigurationSection
{
    [ConfigurationCollection(typeof(ConfigCollection<BounceProviderConfig>), AddItemName = "Provider")]
    [ConfigurationProperty("Providers", IsRequired = true)]
    public ConfigCollection<BounceProviderConfig> Providers
    {
        get { return (ConfigCollection<BounceProviderConfig>)this["Providers"]; }
        set { this["Providers"] = value; }
    }                
}

public class BounceProviderConfig : ConfigurationElement
{
    [ConfigurationProperty("Id", IsRequired = true)]
    public int Id
    {
        get { return (int)this["Id"]; }
        set { this["Id"] = value; }
    }

    [ConfigurationProperty("Columns", IsRequired = false)]
    public BounceProviderColumns Columns
    {
        get { return (BounceProviderColumns)this["Columns"]; }
        set { this["Columns"] = value; }
    }

    public static BounceProviderConfig GetByProviderId(int providerId)
    {
        var section = ConfigUtils.GetConfigurationSection<BounceProvidersSection>("BounceProviders");
        foreach (BounceProviderConfig provider in section.Providers)
        {
            if (provider.Id == providerId)
                return provider;
        }

        return null;
    }
}

public class BounceProviderColumns : ConfigurationElement
{
    [ConfigurationProperty("Email", IsRequired = true)]
    public ColumnConfig Email
    {
        get { return (ColumnConfig)this["Email"]; }
        set { this["Email"] = value; }
    }

    [ConfigurationProperty("Date", IsRequired = true)]
    public DateColumnConfig Date
    {
        get { return (DateColumnConfig)this["Date"]; }
        set { this["Date"] = value; }
    }

    [ConfigurationProperty("Message", IsRequired = true)]
    public ColumnConfig Message
    {
        get { return (ColumnConfig)this["Message"]; }
        set { this["Message"] = value; }
    }        
}

public class ColumnConfig : ConfigurationElement
{
    [ConfigurationProperty("Name", IsRequired = true)]
    public string Name
    {
        get { return (string)this["Name"]; }
        set { this["Name"] = value; }
    }
}