从web.config中读取多个子配置

时间:2014-08-26 12:03:01

标签: c# configuration

我在简单的web.config中有这些标签

      <Data>
        <format type="F1">
          <Child1>
            Apples
          </Child1>
          <Child2>
            Pears
          </Child2>
        </format>
        <format type="F2">
          <Child3>
            Oranges
          </Child3>
        </format>
      </Data>

如您所见,我使用由属性标识的多个格式标签。每种格式都有自己的孩子。

在我的代码中,我需要轻松访问这些配置。但我不知道怎么做。 如果需要,可以更改Web.config。我需要这样的东西:

mySetting.Format["F1"].["Child1"]

仅用于阅读设置。什么都没写。

我整个上午都在阅读配置API,我知道如何将它与简单(非重复)标签一起使用。我也查看了 ConfigurationCollection ,但也没有这样做。

任何指针都会非常感激。

更新

在Narek发表言论之后,我改变了方法。 我现在正在使用像这样的web.config:

<Data>
  <F1 
    Child1="Apples" 
    Child2="Pears"
    />
  <F2 Child3="Oranges" />
</Data>

我的设置课程现在是:

public class Settings : ConfigurationSection
{
    // Create a "Format" element.
    [ConfigurationProperty("F1")]
    public Format1Element Format1
    {
        get
        {
            return (Format1Element )this["F1"];
        }
        set
        { this["F1"] = value; }
    }

    // Create a "Format" element.
    [ConfigurationProperty("F2")]
    public Format2Element Format2
    {
        get
        {
            return (Format2Element )this["F2"];
        }
        set
        { this["F2"] = value; }
    }
}

public class Format1Element : ConfigurationElement
{
    [ConfigurationProperty("Child1", IsRequired = true)]
    public String Child1
    {
        get
        {
            return (String)this["Child1"];
        }
        set
        {
            this["Child1"] = value;
        }
    }
}

public class Format2Element : ConfigurationElement
{
    [ConfigurationProperty("Child3", IsRequired = true)]
    public String Child3
    {
        get
        {
            return (String)this["Child3"];
        }
        set
        {
            this["Child3"] = value;
        }
    }
}

我现在可以使用以下方式获取设置:

settings.Format1.Child1;

我将此页面用作参考http://msdn.microsoft.com/en-us/library/vstudio/2tw134k3(v=vs.100).aspx

1 个答案:

答案 0 :(得分:0)

功能

public static string GetChild(string formatType, string child)
    {
        using (XmlReader reader = XmlReader.Create(filePath))
        {
            XDocument doc = XDocument.Load(reader);

            var val = doc.Descendants().Where(a => a.Name.LocalName == "format" && a.FirstAttribute.Value == formatType).Select(a => a.Element(child)).First().Value;
            return val;
        }            

    }

呼叫

 GetChild("F1", "Child1");

否则你可以这样做

    <configuration> 
     ...
      <appSettings>
        <add key ="[F1_Child1]" value="Apples"/> 
        <add key ="[F1_Child2]" value="Pears"/> 
      </appSettings>
    </configuration>

让你的孩子

  var child =  ConfigurationSettings.AppSettings [ "F1_Child1" ] ;