您的位置:首页 > 运维架构

一个WinForm程序配置信息的简单模型和维护工具——使用说明

2010-09-20 15:06 741 查看

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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐