我想在配置中使用以下结构:
<MySection>
<add key="1" value="one" />
<add key="2" value="two" />
<add key="3" value="three" />
</MySection>
我有一个限制,MySection不能使用AppSettingsSection,因为它必须从不同的父自定义部分继承。我需要将此部分解析为NameValueCollection,以便在调用类似的内容时使用:
ConfigurationManager.GetConfig("MySection")
它应该返回一个NameValueCollection。怎么去做这个?我在NameValueConfigurationCollection上找到了一些信息,但这不是我想要的。
答案 0 :(得分:8)
这有效 -
代码:
class Program
{
static void Main(string[] args)
{
NameValueCollection nvc = ConfigurationManager.GetSection("MyAppSettings") as NameValueCollection;
for(int i=0; i<nvc.Count; i++)
{
Console.WriteLine(nvc.AllKeys[i] + " " + nvc[i]);
}
Console.ReadLine();
}
}
class ParentSection : ConfigurationSection
{
//This may have some custom implementation
}
class MyAppSettingsSection : ParentSection
{
public static MyAppSettingsSection GetConfig()
{
return (MyAppSettingsSection)ConfigurationManager.GetSection("MyAppSettings");
}
[ConfigurationProperty("", IsDefaultCollection = true)]
public NameValueConfigurationCollection Settings
{
get
{
return (NameValueConfigurationCollection)base[""];
}
}
}
配置:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<!-- <section name="MyAppSettings" type="CustomAppSettings.MyAppSettingsSection, CustomAppSettings"/> -->
<section name="MyAppSettings" type="System.Configuration.AppSettingsSection, System.Configuration, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"/>
</configSections>
<MyAppSettings>
<add key="1" value="one"/>
<add key="2" value="two"/>
<add key="3" value="three"/>
<add key="4" value="four"/>
</MyAppSettings>
</configuration>
我主要担心的是我的部分需要继承自定义部分,并且我想在调用ConfigurationManager.GetSection(“MyAppSettings”)时返回NameValueCollection。
我将type属性更改为AppSettingsSection,即使它在图片中没有任何地方也有效。现在我需要弄清楚它是如何工作的,但现在好处是我有一个工作样本:)
更新:不幸的是,这不是实现目标的预期方式,因为现在自定义部分根本没有进入图片,所以不幸的是这不是最好的方法它。
当然,如果你只是想重命名你的appsettings部分,这就像魅力一样。
答案 1 :(得分:2)
你应该创建一个派生自ConfigurationSection
在此处查看完整示例:How to: Create Custom Configuration Sections Using ConfigurationSection