C#開發中使用配置檔案物件簡化配置的本地儲存
0x00 起因
程式的核心是資料和邏輯,開發過程中免不了要對操作的資料進行設定,而有些資料在程式執行過程中被使用者或程式做出的修改是應該儲存下來的,這樣程式在下次執行時可以保留上次的一些設定。同樣有時我們希望修改某些設定而不需要重新編譯程式,這樣也可以通過修改本地配置檔案達到目的。之前在網上看到過一篇文章,講的是小程式或測試類的程式應該追求效率,相關配置完全可以硬編碼到程式碼裡,無需寫到配置檔案裡。關於什麼屬於小程式並沒有一個明顯的界定,至於要不要寫到配置檔案裡這是仁者見仁的問題。我個人還是比較傾向與寫到配置檔案的。當然,對於指令碼語言來說這個問題就小很多了。
那麼如何能快捷方便的儲存配置資訊呢,這次寫的這個類就是嘗試去解決這個問題的。主要包括建立和載入配置檔案、以鍵值對的形式儲存和讀取配置資訊。在配置資訊的儲存方式上可以使用XML或者JSON,我選了XML,一方面是閱讀起來比較容易,手動修改也方便,另一方面是.NET本身提供XmlDocument類幫助操作XML檔案,這樣我們只要在此基礎上進行一下包裝就可以了。
0x01 基本功能的實現
1.配置檔案的載入和建立
public static ConfigFile LoadFile(string filename)
用使用者載入配置檔案,如果檔案保護存在則返回null
public static ConfigFile LoadOrCreateFile(string filename)
用於載入配置檔案,如果檔案不存在則建立一個新物件並呼叫CreateFile()建立配置檔案。
protected virtual void CreateFile()
這個是virtual方法,可以根據需求在子類中重寫。
2.配置資訊的儲存
以下方法都是為了簡化操作,對AddOrSetKeyValue的包裝
public void AddOrSetConfigValue(string key, string value)
可以將鍵值對儲存在Root/Config節點下,key不存在則建立新key,key已存在則更新值。
Public void AddOrSetConfigValue<T>(string key, T value)
可以將任意型別存入Root/Config節點下,value呼叫ToString()方法轉為string。
3.配置資訊的讀取
以下方法都是對GetKeyValue的包裝
配置以鍵值對的方式儲存,這是個最簡單的情況。值的讀取都是在Root/Config節點下。
public string GetConfigValue(string key)
根據key從固定的XPath中獲取值
public bool TryParseConfigValue(string key, out result)
有多個過載,可以根據key取出值並呼叫相應的TryParse方法進行型別轉換,返回false表示轉換失敗,結果通過result傳出。轉換失敗時result為型別預設值。
public XXX GetConfigKeyValueIXXX(string key)
根據key獲取值並轉化為XXX型別,轉化失敗丟擲異常。
4.使用帶引數的屬性簡化鍵值操作
為了能儘量使操作用著方便,對於string型別的值提供了建議的操作方法,可以通過:
config[“key”]的方式取值,通過config[“key”]=”test”的方式儲存。
0x02 功能的擴充套件
ConfigFile型別只是提供了一個很簡單的框架,如果對配置儲存有其它需求可以繼承該型別並重寫CreateFile方法,以在此基礎上修改或建立完全不同的配置檔案結構。
對GetKeyValue和AddOrSetKeyValue方法包裝可以新增新方法以快速讀取和儲存配置資訊。
0x03 測試例子
這個類的使用非常簡單,用靜態方法建立或載入一個配置檔案即可方便的進行讀取和儲存的操作。
測試程式碼:
測試結果:
儲存的配置檔案:
0x04 相關下載
https://github.com/durow/TestArea/tree/master/ConfigFileTest
更多內容歡迎訪問我的部落格:http://www.durow.vip