我正在尝试为我目前参与的asp.net项目实现自定义配置解决方案。
这是配置声明
<sectionGroup name="WebsiteConfig" type="{namespace}.{class}, {assembly}">
<section name="Languages" type="{namespace}.{class}, {assembly}"/>
<section name="LinkFormats" type="{namespace}.{class}, {assembly}"/>
<section name="Countries" type="{namespace}.{class}, {assembly}"/>
</sectionGroup>
这是我正在尝试使用的实际配置
<WebsiteConfig>
<Languages>
<Language code="en" domain="...">
<Theme .../>
<SiteMap ..."/>
</Language>
<Language code="de" domain="...">
<Theme .../>
<SiteMap .../>
</Language>
</Languages>
<Countries>
<Country Code="UK">
<Files>
<File name="..." fileUrl="..." enabled="true" />
<File ... />
</Files>
<Messages>
<Message Enabled="true" Message="..." />
<Message ... />
</Messages>
</Country>
<Country Code="...">....</Country>
</Countries>
<LinkFormats UseRewrites="false">
<Link name="..." format="..." formatRewrite=".../"/>
<link .... />
</LinkFormats>
</WebsiteConfig>
我遇到的问题是Country元素(ConfigurationElement)中的Files和Messages集合会抛出一个无法识别的元素'File'等。
我的国家/地区元素具有“文件和消息”的以下属性
[ConfigurationProperty("Files")]
public FilesSection Files
{
get
{
return (FilesSection)this["Files"];
}
set
{
this["Files"] = (object)value;
}
}
[ConfigurationProperty("Messages")]
public MessagesSection Messages
{
get
{
return (MessagesSection)this["Messages"];
}
set
{
this["Messages"] = (object)value;
}
}
FilesSection和MessagesSection都是从ConfigurationElement派生而来的,其默认集合类型为x,它是从ConfigurationElement派生的项集合。
有没有人能够了解我出错的地方?
我是否需要将国家/地区和国家/地区转换为SectionGroup,然后将文件和消息转换为部分?
答案 0 :(得分:4)
基于这篇文章http://www.endswithsaurus.com/2008/11/custom-configuration-section.html我发现我需要设置ElementName,因为父级不是区段处理程序的嵌套集合将不遵守用于设置子元素的“AddItemName”。
答案 1 :(得分:0)
而不是像您提供的文章中那样为元素名称设置内部成员变量,而是使用您的自定义名称覆盖ElementName属性:
public class MySettings : ConfigurationElementCollection
{
protected override ConfigurationElement CreateNewElement()
{
return new MySetting();
}
protected override object GetElementKey(ConfigurationElement element)
{
return ((MySetting)element).Name;
}
protected override string ElementName
{
get { return “MySetting”; }
}
...
有关详细信息,请参阅article here: