DotSpatialの素晴らしいところは、自分で作成したプラグインの情報をプロジェクトファイルに追加できるところです。こういった拡張性を考慮したプログラム設計は流石です。
今回は、自作したデータベースプラグインの接続情報を、プロジェクトファイルに保存する方法を説明します。
作成する手順は以下の通りです。
- プロジェクトファイルに保存するデータクラスを作成
- データクラスを編集する画面を作成
- プラグインクラスの作成
1.データクラスを作成
プロジェクトファイルは、XML形式で保存されており、DotSpatial本体にある、SerializeAttributeクラスを利用して、シリアライズ化⇔デ シリアライズ化を行います。まずは、任意のクラスを作成し、保存したいプロパティに、属性を記述します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
using DotSpatial.Serialization; namespace DotSpatial.Plugins.Database.Data { public class DbConnectionInfo { [Serialize("Name")] public string Name { get; set; } [Serialize("Host")] public string Host { get; set; } [Serialize("Port")] public string Port { get; set; } [Serialize("DataBase")] public string DataBase { get; set; } [Serialize("UserName")] public string UserName { get; set; } [Serialize("Password")] public string Password { get; set; } } } |
2.データクラスを編集する画面を作成
ここは、特に注意点はないです。通常のアプリケーションと同様に、編集画面を作成し、画面の情報をデータクラスに格納します。
3.プラグインクラスの作成
プラグインクラスを作成し、Activateメソッドで、シリアライズ/デシリアライズのイベントハンドラを追加します。
1 2 3 4 5 6 7 8 9 10 11 12 |
public override void Activate() { // メニューへの登録 this.AddMenus(base.App.HeaderControl); // プロジェクトファイルからの読み込み this.App.SerializationManager.Serializing += OnSerializing; this.App.SerializationManager.Deserializing += OnDeserializing; this.App.SerializationManager.NewProjectCreated += OnNewProjectCreated; // 接続情報 this.ConnectionList = new List<DbConnectionInfo>(); base.Activate(); } |
シリアライズのハンドラーでは、SerializationManager.SetCustomSettingメソッドを使って、データクラスの内容がシリアライズ化され、プロジェク トファイルに書き込まれます。
1 2 3 4 |
private void OnSerializing(object sender, SerializingEventArgs e) { this.App.SerializationManager.SetCustomSetting(this.Name + "_Connections", this.ConnectionList); } |
一方、デシリアライズのハンドラーでは、SerializationManager.GetCustomSettingメソッドを使って、プロジェクトファイルの内容がデシリアライズ化され、データクラスのオブジェクトに内容が取り込まれます。
1 2 3 4 |
private void OnDeserializing(object sender, SerializingEventArgs e) { this.ConnectionList = App.SerializationManager.GetCustomSetting(this.Name + "_Connections", this.ConnectionList); } |
4.プロジェクトファイルの確認
データクラスの内容が、プロジェクトファイルに格納されています。