2011年08月25日

アプリケーションの設定情報の扱いについて考えてみる(6)

   このエントリーをはてなブックマークに追加 Clip to Evernote
このシリーズの最後として、構成ファイルに何らかのコレクションを保持させる方法について考えてみたいと思います。
第5回で扱った、ConfigurationSection を使います。
そのほか使うクラスは、

System.Configuration.ConfigurationElementCollection
System.Configuration.ConfigurationElement

の2つのクラスです。
ConfigurationElementCollection クラスは、構成ファイル内の要素のコレクションを表します。
この時のコレクションの要素が、ConfigurationElement クラスとなります。
実際には、これらのクラスから独自のクラスを派生させることになります。

今回は、アプリケーションのどの機能が何時呼び出されたかを構成ファイルに記録するという例を考えます。

まず、コレクションの要素である FunctionInfoクラスから定義します。
このクラスは、ConfigurationElementから派生させます。


Keyには、機能番号を、Valueには、日付時刻を格納することとします。
ConfigurationElement がコレクションの要素の場合には、
要素を一意に特定するキーを示すプロパティには、IsKey=true を指定するようにします。
ここでは、Key, Value という名前を使いましたが、この名前にこだわる必要はありません。
また、ここでは2つのプロパティとしましたが、3つ以上のプロパティでも問題ありません。

つぎに、このFunctionInfo要素を持つ、コレクションクラスを定義します。
このコレクションクラスは、ConfigurationElementCollectionから派生させます。

派生するには、最低限、CreateNewElement、GetElementKey の2つのメソッドをoverrideします。

ただ、これだけだと、コレクションからの要素の取得、追加、削除、列挙などができないので、
必要なメソッドを要求に合わせて作り込みます。


そして、最後に、このコレクションを持つ、ConfigurationSection クラスを実装します。
ここでは、functions という名前のXMLタグの中に、コレクションを保持するようにしました。
前回同様、GetSectionというstaticメソッドと、Saveメソッドを用意しました。

これで、必要なクラスを定義できました。
configファイルは、初期状態として、以下のようなものを用意します。


これで準備完了です。

以下は、使い方の簡単なサンプルです。


実行後のconfigファイルの例です。




 

この記事へのトラックバックURL

http://trackback.blogsys.jp/livedoor/gushwell/52184631