C#AppSettings:有一种简单的方法可以将集合放入<appsetting> </appsetting>

时间:2009-11-18 11:36:40

标签: c# set collections setting

我试过

<appSettings >
    <add key="List" value="1"/>
    <add key="List" value="2"/>
    <add key="List" value="3"/>
  </appSettings >

System.Configuration.ConfigurationManager.AppSettings.GetValues("List");

但我只得到最后一个成员。 我怎么能轻易解决这个问题?

5 个答案:

答案 0 :(得分:24)

我遇到了类似的问题,我用这段代码做了。希望这有助于解决您的问题。

在这种情况下,List(类似于我的URLSection)将在web.config中有一个完整的配置部分,您可以从该部分获取所有值。

<configSections>
    <section name="URLSection" type="A.WebConfigSection,A,Version=1.0.0.0,Culture=neutral,PublicKeyToken=null"/>
</configSections>

<appSettings></appSettings>

<URLSection>
    <urlCollection>
        <add url="1" value="a"/>
        <add url="2" value="b"/>
    </urlCollection>
</URLSection>

我为此创建了三个类:ConfigElement,ConfigElementCollection,WebConfigSection。

<强> ConfigElement

using System;
using System.Collections.Generic;
using System.Text;
using System.Configuration;

namespace A
{
  public class ConfigElement:System.Configuration.ConfigurationElement
{
    [ConfigurationProperty("url",IsRequired=true) ]
    public string url
    {
        get
        {
            return this["url"] as string;
        }
    }

    [ConfigurationProperty("value", IsRequired = true)]
    public string value
    {
        get
        {
            return this["value"] as string;
        }
    }



  }
}

<强> ConfigElementCollection

using System;
using System.Collections.Generic;
using System.Text;
using System.Configuration;

namespace A
{
  public class ConfigElementCollection:ConfigurationElementCollection
 {
    public ConfigElement this[int index]
    {
        get
        {
            return base.BaseGet(index) as ConfigElement;
        }

    }

    protected override ConfigurationElement CreateNewElement()
    {
        return new ConfigElement();
    }

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

<强> WebConfigSection

using System;
using System.Collections.Generic;
using System.Text;
using System.Configuration;

namespace A
{
 public class WebConfigSection:ConfigurationSection
 {

    public WebConfigSection()
    {

    }

    [ConfigurationProperty("urlCollection")]
    public ConfigElementCollection allValues
    {
        get
        {
            return this["urlCollection"] as ConfigElementCollection;
        }
    }

    public static WebConfigSection GetConfigSection()
    {
        return ConfigurationSettings.GetConfig("URLSection") as WebConfigSection;
    }
 }
}

答案 1 :(得分:3)

    foreach (string str in ConfigurationManager.AppSettings.AllKeys)
    {
        if (str.ToUpper().IndexOf("SOMESPECIAL") > -1) //the somespecial ones you want to add in
            lstList.Add(ConfigurationManager.AppSettings[str]);
    }

答案 2 :(得分:2)

NinjaSettings开箱即用。

在包管理器控制台中

Install-Package NinjaSettings

您可以将列表声明为

  <appSettings>
    <add key="List" value="50,20,10,100"/>
  </appSettings>

然后创建一个接口,其中列表可以映射到任何ICollection或Array

public interface IAppSettings
{
    List<int> List { get; }
}

然后访问您的设置用户NinjaSettings包装器。通常你会使用IOC来连接它,但基本用法是

   var settings = new NinjaSettings<IAppSettings>().Settings;

   int total = 0;
   for (var i in settings.List) 
   {
      total+=i;        
   }

答案 3 :(得分:1)

您可能最好将此信息放在单独的XML文件中,并在AppSettings中引用该文件。这将使您在检索信息和使用信息方面获得更大的灵活性。

唯一的想法是你想要创建一个单独的(静态?)类来以类似于System.Configuration.ConfigurationManager.AppSettings类的方式读取XML。

另一方面,如果它不在你的Web.Config文件中,我建议实现这一目的的唯一方法就是在一个中使用[pipe /逗号/分号]分隔数组列出“设置。

答案 4 :(得分:1)

Haacked提供了一种简洁的配置设置方法。他的方法使用了一个派生自ConfigurationSection的类。因此,对于他的博客示例,您的app.config或web.config xml表示将如下所示:

<configuration>
  <configSections>
    <section name="BlogSettings" type="Fully.Qualified.TypeName.BlogSettings,   
      AssemblyName" />
  </configSections>
  <BlogSettings frontPagePostCount="10" title="You’ve Been Haacked" />
</configuration>

值得一读:

http://haacked.com/archive/2007/03/12/custom-configuration-sections-in-3-easy-steps.aspx