建立一個基類 Configuration,讓開發者只要定義屬性、標註屬性,即可自動完成設定檔的讀取、寫入、型別轉換,支援 XML、INI、Registry 三種格式,且可擴充自訂格式。
XmlPattern、IniPattern、(規劃中) RegistryPattern。[ConfigurationPattern(TPattern.XML)]
public class MyXmlCfg : Configuration
{
const string PATH = @"\myxmlcfg.xml";
public MyXmlCfg() : base(PATH) { }
private string _name;
private int _randId;
public string Name { get => _name; set => _name = value; }
[ConfigurationIgnore] // 不寫入檔案
[XmlIgnore]
public int RandId { get => _randId; set => _randId = value; }
}
// 呼叫端
var cfg = new MyXmlCfg();
cfg.Open(); // 自動讀取
Console.WriteLine(cfg.Name);
cfg.Name = "NewName";
cfg.Close(); // 自動寫入 (若非 ReadOnly)
[ConfigurationPattern(TPattern.INI, "DefaultSection")]
public class MyIniCfg : Configuration
{
const string PATH = @"\mycfg.ini";
public MyIniCfg() : base(PATH) { }
[Section("PrivateInfo")]
public string Name { get; set; }
[Section("PrivateInfo")]
[Key("Age", 18)] // 指定 Key 名稱與預設值
public byte Age { get; set; }
[Section("ClassInfo")]
[Key("Class")]
public string ClassName { get; set; }
[ConfigurationIgnore]
public int RandId { get; set; }
}
INI 專用屬性:[Section] 指定區段、[Key] 指定鍵名/預設值/大小。
Open() → Pattern.Load() → 反射屬性 → 型別轉換 → 賦值欄位。INotifyPropertyChanged)。Close() → 若非 ReadOnly → Pattern.Save() → 反射屬性 → 序列化寫入。TPattern 列舉加入新模式名稱。IConfigurationPattern 介面 (參考 XmlPattern/IniPattern)。ConfigurationPatternAttribute 對應新模式。以「慣例優於設定」+ 屬性標註,將設定檔操作封裝於基類,業務碼零樣板碼,專注於領域模型本身。