プログラム

C#プログラミングレッスン

C#での .NETプログラミングを易しく丁寧に解説するメールマガジンです。「C#プログラミング・レッスン」で、.NETプログラミングをマスターしましょう。

全て表示する >

【C#プログラミングレッスン】 No.118-ConfigurationManager(3)

2007/02/20

┏━┳━━━━━━━━━━━━━━━━━━━━━━━━━┳━┳━┳━┓
┃☆┃ C#プログラミングレッスン                         ┃_┃□┃×┃
┣━┻━━━━━━━━━━━━━━━━━━━━━━━━━┻━┻━┻━┫
┃ 構成ファイル(3)                                            No.118┃
┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛

■──────────────────────────────────
■ 独自形式のアプリケーション設定情報

さて、前回は、アプリケーション情報を取得する方法を説明しましたが、以下
のような、独自形式の情報を構成ファイルに記述したい場合があります。

    <myApp.Settings>
        <mySection1 key="myKey1"
                    strValue="myString1"
                    intValue="123" />  
    </myApp.Settings>

こういった場合は、独自の構成セクションハンドラクラスを書く必要がありま
す。独自の構成セクション ハンドラクラスは、ConfigurationSection から派
生します。

上記のセクションを取得する構成セクションクラスは以下の通りです。

using System;
using System.Collections.Generic;
using System.Text;
using System.Configuration;

namespace Gushwell {
    public class MyAppSection : ConfigurationSection {
        const string cKey = "key";
        [ConfigurationProperty(cKey, IsRequired = true, 
                   DefaultValue="defaultkey")]
        [StringValidator(InvalidCharacters = 
            "~!@#$%^&*()[]{}/;'\"|\\", MinLength = 1, MaxLength = 20)]
        public String Key {
            get { return (String)this[cKey]; }
        }

        const string cStrValue = "strValue";
        [ConfigurationProperty(cStrValue, IsRequired = true, 
                DefaultValue = "defaultString")]
        [StringValidator(MinLength = 1, MaxLength = 60)]
        public string StrValue {
            get { return (string)this[cStrValue]; } 
        }

        const string cIntValue = "intValue";
        [ConfigurationProperty(cIntValue, 
                     IsRequired = false, DefaultValue = 0)]
        [IntegerValidator(ExcludeRange = false, 
                     MinValue = 0, MaxValue = 10000)]
        public int IntValue {
            get { return (int)this[cIntValue]; }
        }
    }
}

独自の構成セクションクラスを作成するのは、意外と簡単ですね。
ConfigurationSection クラスから派生し、セクション内の属性に対応するプロ
パティを作成するだけです。
なお、プロパティには、ConfigurationProperty 属性を付加します。
StringValidator や IntegerValidator 属性は省略可です。プロパティの get
では、プロパティの型に合わせて、キャストしてください。

これで、独自の構成セクションクラスができました。


■──────────────────────────────────
■ 構成設定ファイルの記述方法

構成ファイルに記述する際は、実際には configSections を記述し、上記クラ
スを登録する必要があります。この configSections は、必ず configuration
セクションの最初に書いてください。


<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <configSections>
    <sectionGroup name ="myApp.Settings">
      <section name="mySection1"
                  type="Gushwell.MyAppSection, MyAppSectionLib"/>
    </sectionGroup>
  </configSections>
  <myApp.Settings>
      <mySection1 key="myKey1"
                  strValue="myString1"
                  intValue="123"   />  
  </myApp.Settings>
</configuration>

sectionGroup セクションで、セクション名とそのクラスの情報(クラス名、ア
センブリ名など)を指定します。


■──────────────────────────────────
■ 独自形式のアプリケーション設定情報の取得

この構成ファイルを読み込むコードは以下のようになります。

 MyAppSection cs = 
   ConfigurationManager.GetSection("myApp.Settings/mySection1") 
     as MyAppSection;
 string key = cs.Key;
 string s = cs.StrValue;
 int n = cs.IntValue;
 Console.WriteLine("{0},{1},{2}", key, s, n);


ConfigurationManagerのGetSectionで、セクション情報を取得します。
GetSection の戻り値の型は、上記で作成した構成セクションクラスになります。
この例では、MyAppSection ですね。このインスタンスが返ってきますので、
あとは、MyAppSection のプロパティにアクセスするだけです。

┌─┬─────────────────────────┬─┬─┬─┐
│☆│ C#プログラミングレッスン  (ぼぼ週刊)            │_│□│×│
├─┴─────────────────────────┴─┴─┴─┤
│ Published by Gushwell.                                           │
│ Copyright (C) 2004-2007 Gushwell All rights reserved.            │
│ Microsoft MVP Visual Developer - Visual C#(Apr 2006 - Mar 2007)  │
│-------------------- Gushwell's Page ---------------------------- │
│ 窓際プログラマーの独り言  :http://blog.livedoor.jp/gushwell/    │
│ 窓際プログラマーの読書三昧:http://gushwell.jugem.jp/            │
│ C#デザインパターン :                                             │
│  『増補改訂版Java言語で学ぶデザインパターン入門 / 結城 浩(著)』  │
│   のサンプルコードをC#に移植したものを掲載しています。           │
│   移植後のコードの公開は、結城氏の了解を得ています。             │
│   http://blog.livedoor.jp/gushwell/archives/50333227.html        │
└─────────────────────────────────┘

規約に同意してこのメルマガに登録/解除する

メルマガ情報

創刊日:2004-08-12  
最終発行日:  
発行周期:ほぼ週刊  
Score!: 非表示   

コメント一覧コメントを書く

この記事にコメントを書く

上の画像で表示されている文字を半角英数で入力してください。

※コメントの内容はこのページに公開されます。発行者さんだけが閲覧できるものではありません。 コメントの投稿時は投稿者規約への同意が必要です。

  • コメントはありません。