Net有道

紫冠道人的求道历程

导航

RFID会议签到系统总结(五)――系统配置(上)

 

由于在XML处理方面的长足进步,现在写程序在配置方面比之以前是方便多了。比如在.net 1.1里,对于很简单的配置,用<appSettings>节就可以轻而易举的解决问题,你要读取配置一行代码就解决问题了。即使是要配置的变量稍微多一点,但化繁为简后用上述方法也可以胜任。(不过我看到过上百个<add key=”” value=”” />在同一个配置文件里,这样的话呢就太恐怖了,不知那是如何维护的)

这个系统要配置的东西不算很多,不过有几点比较的棘手。首先是有些变量是要求可写的,比较象数据库连接,象签到终端所属的管控端地址等,这些东西不是你程序安装时配置好就行的。再就是有些变量之间是有结构、有层次的,比如关于硬件方面的配置,一种硬件设备就有一组配置;比如象管控端程序的菜单呀,工具栏呀这些东西,每一项都带很多参数,一项项地再层层组成一个大集合。最后就是程序可能是不止一个配置文件的(管控端程序就是分为几个配置文件的)。这样势必得自己在配置管理方面下点功夫,不能直接用Framework里现成的了。

现成的东西是不能用了,但在Framework里半现成的还是有,我们可以自定义配置节,然后自己实现配置节处理程序,这样在应用端跟现成的基本没什么区别了。

.net 1.1里,所有的配置节处理程序都必须实现IConfigurationSectionHandler这个接口,这个接口只有Create这么一个方法,在这个方法里我们可以决定如何分析配置节的XML,以向外提供一个系统可以认识的一种配置结构。我很顺理成章的就决定用XML序列化的方法来实现配置文件XML字串与配置设置类之间的转化。

第一步先要设计一些配置设置的类,签到终端程序的配置基本上可以分下数据库、通讯、硬件及其他这四个部分(在管控端还有菜单、工具栏等等)。类的设计没什么好说的,重要的就是要注意一些XmlAttribute的运用,这些东西在XML序列化时会派上用场。关于配置设置类举一个简单但比较齐全的例子,其中即有Element,又有Attribute,而且还有不用序列化的属性。

下面是数据方面的配置设置

数据访问、数据同步配置类


 

(因为这个配置设置类在管控端只需要一个数据库连接串即可,但为此多写一个类又觉得心有不甘,所以偷懒加了个编译指令双方可以共用)

相应的在配置文件里的配置就象下面这个样子:

    <Data Local="DGkDBWoADigKLAIMkiOk+vy5sd5Dg=="

       Remote="DGnRBWoADiH4jOnb4uqjdE5ZQmEIsVw==">

       <Detect-ms>1000</Detect-ms>

       <Sync-ms>1000</Sync-ms>

    </Data>

 

二头的东西都具备,现在写中间的配置节处理程序。因为配置节比较多,而且每一个处理程序的写法都是一样的,所以又多了个处理程序的基类。

自定义配置节处理程序的基类


  

上面HandlerSectionObjectMap.Dictionary里存放着各个SectionHandler与具体的配置设置类的类型的映射。

SetSection方法则是为写配置文件而准备的,其实就是一个XML序列化的过程(而Create则是反序列化过程)。

这样以后,只要在应用里写ConfigurationSettings.GetConfig("Data") as DataCfg就可以把配置文件的配置读出来了。当然最后别忘了在配置文件的开头加上相应的<section>,比如:

<section name="Data"

       type="SectionHandler.DataSectionHandler,Common" />

 

一贴代码这文章就长了好多,今天先到这儿了,写配置文件的问题下篇再述。

 

posted on 2007-06-13 10:07  lichdr  阅读(802)  评论(1编辑  收藏  举报