2010-11-26 2 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 (ConfigurationElemen т) выбрасывает Непризнанные элемент «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 с коллекцией по умолчанию типа х, которые представляет собой набор элементов, полученных из ConfigurationElement.

Есть ли у кого-нибудь представление о том, где я ошибся?

Нужно ли мне включать страны и страну в разделгруппы, а затем превращать файлы и сообщения в раздел?

ответ

4

Основываясь на этой статье http://www.endswithsaurus.com/2008/11/custom-configuration-section.html Я обнаружил, что мне нужно установить ElementName, потому что вложенная коллекция, родитель которой не является обработчиком раздела, не будет подчиняться «AddItemName» для установки дочерних элементов.

+0

мог вы делитесь своим кодом? – 2017-06-23 18:47:31

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 для более подробно: