一個WinForm程式配置資訊的簡單模型和維護工具——使用說明

來源:互聯網
上載者:User
1. 前言

.NET framework為電腦配置,應用程式配置和安全等資訊定義了一組標準設定檔,這些設定檔的記憶體映射及存取由Configuration程式集支援。

對於某些大型應用系統及專業領域軟體而言,配置資訊的編製和維護是一件複雜的事情。前陣子因為工作關係,藉助Configuration程式集,設計了一個簡單的定義配置資訊結構的模型(簡單得不能稱為架構)和維護工具。雖然由於換工作而沒有用上,不過在我看來還是有其實用價值的。因此將文檔整理了一下,有需要的朋友可依此應用。

本文介紹如何使用此模型和工具。

有關Configuraion程式集,請參考MSDN,尤其是關於建立自訂配置節等文。我對Configuration的總結陳述於《.NET Framework Configuration總結》。

有關此模型和工具的設計思路請參考《一個WinForm程式配置資訊的簡單設計和維護工具——設計說明》。

:https://sourceforge.net/projects/yedaoqproject/files/YedaoqConfiguration/YedaoqConfiguration-Release.rar/download

2. 概述 2.1 能夠協助你做什嗎?

此模型和工具旨在協助開發人員建立結構合理的配置資訊結構、提高使用效率,並降低維護成本。

1. 協助構造樹狀的層次配置結構。

2. 自動將代碼定義的配置結構同步到設定檔。

3. 自動將設定檔中資料讀取到記憶體,對記憶體資料的更改亦會自動儲存至設定檔。

4. 對配置資訊的訪問可使用編輯器的智能感知,無需使用關鍵字字串。

5. 提供工具來編輯向各個客戶提供的初始配置資料。

此模型和工具圍繞以下三個方面來設計:

1. 定義結構清晰、層次豐富的配置結構。

2. 使配置資訊易於訪問。

3. 屏蔽檔案操作。

2.2 在Configuration的基礎上,做了什嗎?

此模型由Configuration程式集的部分擴充而成,並將原Configuration程式集的使用介面作了部分封裝,使其使用流程更加簡化。

1. Configuration對配置資訊的存取以設定檔為單位(映射為Configuration對象)。此模型提供了AppConfiguration,使整個系統的所有配置資訊(可分散儲存於多個設定檔)在記憶體中形成一個整體結構。這有利於配置資訊的使用,也使設定檔對使用者更加透明。

2. 對Configuration相互關聯類型的一些限制和安全性問題作了處理。使定義配置結構更為簡單。

3. 提供了一個介面原型IAppConfigurationProvider,供使用者實現來提供對多套設定檔的枚舉和切換功能。

4. 提供了一個工具,用於同步設定檔的結構和編輯設定檔的內容。

3. 使用指南 3.1 一般概念

配置資訊樹:由AppConfiguration、ConfigurationSection和ConfigurationSectionGroup定義出的樹狀的配置資訊結構,以AppConfiguration為根節點。必須用AppConfiguration來定義根節點,並且不能AppConfiguration不能用於定義其它節點。ConfigurationSectionGroup是樹的非葉子節點,用於連結父節點和子組(段)節點;ConfigurationSection為樹的葉子節點,其中包含一組配置資料。

頂層配置組:直接定義在AppConfiguration中的配置組。頂層配置組相較普通的子配置組有所不同,它實際上是一個設定檔中的最外層配置組,只是出於整體性的考慮,組織到AppConfiguration下。擷取頂層配置組不僅需要名稱關鍵字,還需要檔案名稱等資訊。這些資訊應封裝到IConfigurationUnitInfo對象中傳遞給AppConfiguration索引器。

配置範圍:微軟為配置資訊劃分了三個範圍,電腦、應用程式和使用者。此模型限定於應用程式範圍內,因此包含後兩個範圍。範圍的概念一般用於決定設定檔的位置(應用程式定義域的配置資訊一般存放於安裝目錄下,使用者域的配置資訊一般存放到My Documents中),這也是ClientInfo中要提供兩個目錄欄位的原因。

3.2 類型簡介

程式集: YedaoqConfiguration.dll

命名空間:YedaoqConfiguration

類型

說明

AppConfiguration

配置資訊結構根節點的基類,提供索引器用於擷取頂層配置組。

AppConfigurationProviderAttribute

用於標記AppConfigurationProvider的屬性,工具通過此屬性來從程式集中尋找AppConfigurationProvider。

ClientInfo

IClientInfo的基礎實現,用於儲存客戶資訊(及其設定檔所在目錄資訊)。

ConfigurationHelper

提供擷取配置段(組)、反射等公用邏輯。

ConfigurationObjectManager

將設定檔映射為Configuration對象並管理Configuration對象,供AppConfiguration使用。

ConfigurationSectionGroupInfo

儲存頂層配置組資訊的類。

ConfigurationSectionInfo

儲存頂層配置段資訊的類。

ConfigurationUnitBase

ConfigurationSectionGroupInfo和ConfigurationSectionInfo的基類,描述頂層登錄區的資訊。

EnumConfigDomain

用於描述頂層配置組的範圍(使用者域、應用程式定義域),此概念源自微軟。

ExConfigurationSection

繼承自ConfigurationSection並實現了ICustomTypeDescriptor,任何自訂ConfigurationSection應以此為基類。

IAppConfiguration

配置資訊結構根節點的介面,實現者應繼承AppConfiguration。

IAppConfigurationProvider

枚舉使用者並向使用者提供IAppConfiguration的介面。

IClientInfo

ClientInfo的實現介面。

IConfigurationObjectManager

ConfigurationObjectManager的實現介面。

IConfigurationUnitInfo

ConfigurationUnitBase的實現介面。

3.3 使用此模型改造你的應用程式,並藉助工具來維護配置資訊

要使用此模型和工具,必須做以下工作:

1. 使用AppConfiguration、ConfigurationSection、ConfigurationSectionGroup定義好配置資訊結構模型;

2. 實現一個IAppConfigurationProvider。

3.3.1 定義配置資訊結構模型

使用聲明性模型建立好所有自訂ConfigurationSection和ConfigurationSectionGroup,其中自訂ConfigurationSection應從ExConfigurationSection繼承,否則維護工具顯示的列表中將包含冗餘資訊。有關聲明性模型請參見MSDN有關自訂配置節的文章。

從AppConfiguration建立一個衍生類別,在其中定義頂層配置組。

樣本請參考程式Test工程中以下類:ConfigurationSectionA、ConfigurationSectionB、ConfigurationSectionGroupTest、TestAppConfiguration。

3.3.2 實現 IAppConfigurationProvider

IAppConfigurationProvider是枚舉客戶和擷取客戶配置的介面,應用程式應自主實現有關的邏輯。IAppConfigurationProvider的實作類別必須:

1. 帶有無參建構函式。

2. 使用AppConfigurationProviderAttribute屬性修飾。

維護工具將使用此介面來擷取客戶列表和每個客戶的AppConfiguration資料,它使用此介面的流程為:

圖片。

作為一個樣本,假定我們的應用程式的配置資訊存放在Config子目錄下。有數個客戶,每個客戶的設定檔放在Config的一個子目錄中,這些子目錄的名稱與客戶名稱相同。那麼,可以這樣這樣實現IAppConfigurationProvider:

見程式Test工程以下類:TestAppConfigurationProvider。

3.3.3 ConfigurationModifier的使用

將ConfigurationModifier.exe放置到應用程式目錄下,啟用後,此工具將搜尋目錄下的所有程式集,尋找帶有AppConfigurationProviderAttribute屬性的類。若找到,將擷取客戶列表顯示到左上方的列表框中,從中選擇要編輯其配置資訊的客戶,在左側TreeView中將顯示配置資訊樹,選中葉子節點後,可在右側PropertyGrid中編輯自訂ConfigurationSection中的各個配置項。

3.3.4 來源程式的編譯

來源程式:https://yedaoqproject.svn.sourceforge.net/svnroot/yedaoqproject/YedaoqConfiguration

編譯前,請下載另一個依賴程式集,並引用到YedaoqConfiguration和ConfigurationModifier項目中。

該依賴程式集位置為:https://sourceforge.net/projects/yedaoqproject/files/MySolution/CommonLibrary.dll/download

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.