2010-11-26 46 views
3

我试图实施目前,我参与了一个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元素中的Files和Messages集合(ConfigurationElemen吨)抛出无法识别的元素“文件”等等

我国元件具有用于文件以下属性和消息

[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,然后将文件和消息转换为Section?

回答

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