我想在app.config的控制台应用中启动时加载字典。
我知道我可以使用xml库或linq to XML来加载它来解析和遍历它。我的问题是有一种建立的方式。
是否有某种方法可以将应用程序配置部分添加到app.config中,然后使用System.Configuration命名空间中的ConfigurationManager类自动加载它?
任何一个例子?顺便说一句,我在NET20。
修改
对不起,我应该澄清一下。我想加载字典而不使用AppSettings。我知道该怎么做。当然,使用AppSettings的缺点是我必须更改我的代码以向字典中添加新值。这就是为什么我正在寻找一种自动完成的方法。
答案 0 :(得分:2)
您需要在app.config文件中添加<appSettings>
部分。它看起来像:
<appSettings>
<add key="foo" value="fooValue" />
<add key="bar" value="barValue" />
<add key="baz" value="bazValue" />
</appSettings>
在您的应用中,您可以使用System.Configuration.ConfigurationManager.AppSettings
获取这些值,这是一个NameValueCollection
,实际上是从字符串到字符串的字典。
string myFoo = System.Configuration.ConfigurationManager.AppSettings["foo"];
答案 1 :(得分:2)
您可以按照描述的方式使用appSettings部分,但该部分很容易受到各种需求的污染,因此我通常会避免使用它。您可以制作自定义部分来处理此问题。
想象一下,你有一个名为“PluginSpec”的类,你可以编写如下代码:
[ConfigurationCollection(typeof(PluginSpec), AddItemName = "Plugin",
CollectionType = ConfigurationElementCollectionType.BasicMap)]
public class PluginCollection : ConfigurationElementCollection
{
//This collection is potentially modified at run-time, so
//this override prevents a "configuration is read only" exception.
public override bool IsReadOnly()
{
return false;
}
protected override ConfigurationElement CreateNewElement()
{
return new PluginSpec();
}
protected override object GetElementKey(ConfigurationElement element)
{
PluginSpec retVal = element as PluginSpec;
return retVal.Name;
}
public PluginSpec this[string name]
{
get { return base.BaseGet(name) as PluginSpec; }
}
public void Add(PluginSpec plugin){
this.BaseAdd(plugin);
}
}
上面的代码可以从另一个配置类的成员中使用,如下所示:
[ConfigurationProperty("", IsDefaultCollection = true)]
public PluginCollection Plugins
{
get
{
PluginCollection subList = base[""] as PluginCollection;
return subList;
}
}
以上将是从ConfigurationElement或ConfigurationSection派生的类中的成员。