为了实现集合配置。您可以在 web.config 中使用 ConfigurationSection 和 ConfigurationElementCollection。
使用ConfigurationSection 的一个优点是您可以将Menu 配置的物理文件和web.config 配置的其余部分分开。在主机环境上发布应用程序时,这是非常少的。 (见this)
首先你需要创建菜单配置类
public class MenuConfig : ConfigurationElement
{
public MenuConfig () {}
public MenuConfig (bool enabled, string description)
{
Enabled = enabled;
Description = description;
}
[ConfigurationProperty("Enabled", DefaultValue = false, IsRequired = true, IsKey =
true)]
public bool Enabled
{
get { return (bool) this["Enabled"]; }
set { this["Enabled"] = value; }
}
[ConfigurationProperty("Description", DefaultValue = "no desc", IsRequired = true,
IsKey = false)]
public string Description
{
get { return (string) this["Description"]; }
set { this["Description"] = value; }
}
}
第二定义ConfigurationElementCollection if menu collection
public class MenuCollection : ConfigurationElementCollection
{
public MenuCollection()
{
Console.WriteLineMenuCollection Constructor");
}
public MenuConfig this[int index]
{
get { return (MenuConfig)BaseGet(index); }
set
{
if (BaseGet(index) != null)
{
BaseRemoveAt(index);
}
BaseAdd(index, value);
}
}
public void Add(MenuConfig menuConfig)
{
BaseAdd(menuConfig);
}
public void Clear()
{
BaseClear();
}
protected override ConfigurationElement CreateNewElement()
{
return new MenuConfig();
}
protected override object GetElementKey(ConfigurationElement element)
{
return ((MenuConfig) element).Port;
}
public void Remove(MenuConfig menuConfig)
{
BaseRemove(menuConfig.Port);
}
public void RemoveAt(int index)
{
BaseRemoveAt(index);
}
public void Remove(string name)
{
BaseRemove(name);
}
}
第三创建高级ConfigurationSection,这是您的自定义配置的入口点
public class MenusConfigurationSection : ConfigurationSection
{
[ConfigurationProperty("Menus", IsDefaultCollection = false)]
[ConfigurationCollection(typeof(MenuCollection),
AddItemName = "add",
ClearItemsName = "clear",
RemoveItemName = "remove")]
public MenuCollection Menus
{
get
{
return (MenuCollection)base["Menus"];
}
}
}
使用 web.config 中的部分
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<section name="MenusSection" type="{namespace}.MenusConfigurationSection, {assembly}"/>
</configSections>
<MenusSection>
<Menus>
<add Enabled="true" Description="Desc 1" />
<add Enabled="true" Description="Desc 1" />
</Menus>
</ServicesSection>
</configuration>