2010-11-26 11 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> 

を使用しようとしている実際の構成(ConfigurationElemen t)は

私の国の要素は、ファイルとメッセージの次のプロパティが

[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はどちらも、タイプxのデフォルトのコレクションでConfigurationElementから導出された認識されていない要素「ファイル」などを投げますConfigurationElementから派生したアイテムのコレクションです。

誰かが間違っていた箇所についての洞察はありますか?

国と国をSectionGroupsに変更し、ファイルとメッセージをセクションに変換する必要がありますか?

答えて

4

http://www.endswithsaurus.com/2008/11/custom-configuration-section.html親要素がセクションハンドラではないネストされたコレクションは、子要素を設定するための "AddItemName"に従わないため、ElementNameを設定する必要があることがわかりました。

+0

できましたあなたはコードを共有しますか? –

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を参照してください:

関連する問題