2009-05-20 6 views
6

Helo構成要素の入手方法

構成要素を.configファイルから取得する方法を教えてもらえますか? 私は属性を処理する方法を知っていますが、要素は知りません。一例として、私は次のように解析する:

<MySection enabled="true"> 

<header><![CDATA[ <div> .... </div> ]]></header> 

<title> .... </title> 

</MySection> 

私のC#のコードは、これまでに次のようになります。

public class MyConfiguration : ConfigurationSection 
    { 
     [ConfigurationProperty("enabled", DefaultValue = "true")] 
     public bool Enabled 
     { 
      get { return this["enabled"].ToString().ToLower() == "true" ? true : false; } 
     } 

     [ConfigurationProperty("header")] 
     public string header 
     { 
       ??? 
     } 
    } 

それは私が(上記のコードでは、ヘッダーのプロパティ)要素で行うのですか、どのような属性で動作します?

答えて

0

私はついにこれを行う方法を見つけました。

私が望むものを許可するIConfigurationSectionHandlerインターフェイスがあります。それは私が問題なくのXmlElementのを取得することができたので、uは自分でセクションを解析し、その後の方法に

public object Create(object parent, object configContext, XmlNode section) 

を書くためにいずれかが必要です。

 header = s["header"] != null ? s["header"].InnerText : String.Empty; 
     title = s["title"] != null ? s["title"].InnerText : String.Empty; 

本の下側がありますそのインターフェイスは古くなっていますが、内部で使用されているように、将来のバージョンのフレームワークからは削除されないとMSDNは述べています。

+1

あなたはあなたが対象とする.Netのバージョンを指定していません。上記のすべてのバージョンでは、.Net 1.1の[重要な発言](http://msdn.microsoft.com/en-us/library/system.configuration.iconfigurationsectionhandler(v = vs.110).aspx)は、IConfigurationSectionHandlerが.NET Framework 2.0以降では使用されなくなりました。 –

0

ConfigurationManager.GetSection("SectionName")メソッドを使用して、設定ファイル内の設定セクションを取得できます。

+1

それは間違っているのです。質問は、カスタム設定セクションを設計することについて暑いです。 –

4

ここにあなたが使用することができますかなり良いカスタムconfigセクションDesignerツールだ(と、それは無料です):

Configuration Section Designer

EDIT:

私はMSDNに探していたし、それがカスタム設定セクションができているようですあなたが欲しいものをやってはいけません。要素から設定値を取得します。カスタム設定要素には他の設定要素を含めることができますが、設定値は常に属性から来ます。

多分あなたは他のファイルにあなたのhtmlスニペットを入れて、このようにconfigからそれらを参照することができます。

<MySection enabled="true"> 
    <header filename="myheader.txt" /> 
    <title filename="mytitle.txt" /> 
</MySection> 
+0

私のための醜い解決策。 HTMLページのタイトルとヘッダーをそのように設定しますか? :)私は、特に1つまたはいくつかの(html)行になると思う。これにより、ユーザーはCDATAを使用してHTML文字列を設定することができないため、シナリオからの属性が削除されます。 – majkinetor

+0

さて、カスタムの設定ファイルをカスタム解析で使用する必要があります。 – Vizu

+0

Vizu、構成セクションデザイナーのリンクに1票。そこに退屈なコードをたくさん保存しました。ありがとう – Liam

0

MSDNによると、.NET 4にあなたの現在のConfigurationElementインスタンスが属している構成階層を表す最上位Configurationインスタンスへの参照を与える新しいCurrentConfigurationプロパティがあります。

6

同じことをする別の方法があります。私たちは、文字列値を取得するDeserializeElementメソッドをオーバーライドすることで要素を作成することができ

:あなたの例を使用した作業

public class EmailTextElement : ConfigurationElement { 

    public string Value { get; private set; } 

    protected override void DeserializeElement(XmlReader reader, bool s) { 
     Value = reader.ReadElementContentAs(typeof(string), null) as string; 
    } 

} 
+1

'reader.ReadElementContentAsString()' APIを使う方が良いでしょう。 –

1

を、あなたはCDATA値を取得するのConfigurationElementの「ヘッダ」の逆シリアル化を上書きしようとしています。

<MySection enabled="true"> 
 

 
    <header name="foo"><![CDATA[ <div> .... </div> ]]></header> 
 

 
    <title> .... </title> 
 

 
</MySection>

public sealed class HeaderSection: ConfigurationElement { 
 
     private string __Name, __CDATA; 
 

 
     [ConfigurationProperty("name", IsRequired = true)] 
 
     public string Name { 
 
     get { 
 
      return this.__Name; 
 
     } 
 
     set { 
 
      this.__Name = value; 
 
     } 
 
     } 
 

 
     [ConfigurationProperty("value", IsRequired = true)] 
 
     public string Value { 
 
     get { 
 
      return this.__CDATA; 
 
     } 
 
     set { 
 
      this.__CDATA = value; 
 
     } 
 
     } 
 

 
     protected override void DeserializeElement(System.Xml.XmlReader reader, bool s) { 
 
     this.Name = reader.GetAttribute("name").Trim(); 
 
     string cdata = reader.ReadElementContentAs(typeof(string), null) as string; 
 
     this.Value = cdata.Trim(); 
 
     } 
 
    }

関連する問題