htsign's blog

ノンジャンルで書くつもりだけど技術系が多いんじゃないかと思います

Configクラスの実装サンプル

前回のエントリでちょっと載せたコードについて。
Configクラスを毎回書くのがだるかったので基底クラスを作ってそれを継承するようにしました。

この3つを基底クラスに定義したことで、Configクラスは非常にスッキリしたように思います。

本当はシングルトンパターンもSingleton<T>みたいなクラス作って継承させたかったんですが、Instanceプロパティの型の定義に四苦八苦して、結局派生クラス(この場合Configクラス)に直接書きました。

ちなみに、ConfigクラスにはINotifyPropertyChangedインターフェースは実装していません。
せっかくシンプルにまとめたクラスが見にくくなってしまうと思ったからです。
Notify Property Weaverという大変便利なVisual Studio用のアドオンもあるのですが、配布サイトが既になくなってしまっているのと、VS2010専用であるため、今回は考慮していません。

Configクラスの使い方

const string ConfigFileName = "hogefuga.xml";

string dataPath = mbApiInterface.Setting_GetPersistentStoragePath();
string configPath = Path.Combine(dataPath, ConfigFileName);

// 読み込み
// ※configPathにファイルが存在しない場合や、
//  XMLのデシリアライズに失敗すると、勝手に内部でLoadDefaultを呼びます。
Config.Instance.Load(configPath);

// プロパティ取り出し
Console.WriteLine(Config.Instance.ExampleString); // => example

// プロパティ書き込み
Config.Instance.ExampleBoolean = false;

// 保存
Config.Instance.Save(configPath);