XMLMessageProvider 完整程式碼
using System;
using System.Collections.Specialized;
using System.Collections.Generic;
using System.Configuration.Provider;
using System.Configuration;
namespace Pattern.Provider
{
public class XMLMessageProvider : MessageProvider
{
private string _connectionString;
public override bool Insert(MessageModel mm)
{
// 實際寫入 XML 檔案邏輯略
return true;
}
public override List<MessageModel> Get()
{
List<MessageModel> l = new List<MessageModel>();
l.Add(new MessageModel("XML方式,連接字符串是" + this._connectionString, DateTime.Now));
return l;
}
public override void Initialize(string name, NameValueCollection config)
{
if (string.IsNullOrEmpty(name)) name = "MessageProvider";
if (config == null) throw new ArgumentException("config參數不能為null");
if (string.IsNullOrEmpty(config["description"]))
{
config.Remove("description");
config.Add("description", "XML操作Message");
}
base.Initialize(name, config);
string temp = config["connectionStringName"];
if (string.IsNullOrEmpty(temp)) throw new ProviderException("connectionStringName屬性缺少或為空");
_connectionString = ConfigurationManager.ConnectionStrings[temp].ConnectionString;
if (string.IsNullOrEmpty(_connectionString)) throw new ProviderException("沒找到連接字符串或為空");
config.Remove("connectionStringName");
}
}
}
關鍵點
- 繼承抽象基類
MessageProvider(定義 Insert、Get 抽象方法)。
Initialize 讀取組態區段的 connectionStringName,透過 ConfigurationManager 取得實際連線字串。
- 拋出
ProviderException 符合提供者模式錯誤處理慣例。