RFID会议签到系统总结(五)――系统配置(上)
由于在XML处理方面的长足进步,现在写程序在配置方面比之以前是方便多了。比如在.net 1.1里,对于很简单的配置,用<appSettings>节就可以轻而易举的解决问题,你要读取配置一行代码就解决问题了。即使是要配置的变量稍微多一点,但化繁为简后用上述方法也可以胜任。(不过我看到过上百个<add key=”” value=”” />在同一个配置文件里,这样的话呢就太恐怖了,不知那是如何维护的)
这个系统要配置的东西不算很多,不过有几点比较的棘手。首先是有些变量是要求可写的,比较象数据库连接,象签到终端所属的管控端地址等,这些东西不是你程序安装时配置好就行的。再就是有些变量之间是有结构、有层次的,比如关于硬件方面的配置,一种硬件设备就有一组配置;比如象管控端程序的菜单呀,工具栏呀这些东西,每一项都带很多参数,一项项地再层层组成一个大集合。最后就是程序可能是不止一个配置文件的(管控端程序就是分为几个配置文件的)。这样势必得自己在配置管理方面下点功夫,不能直接用Framework里现成的了。
现成的东西是不能用了,但在Framework里半现成的还是有,我们可以自定义配置节,然后自己实现配置节处理程序,这样在应用端跟现成的基本没什么区别了。
在.net 1.1里,所有的配置节处理程序都必须实现IConfigurationSectionHandler这个接口,这个接口只有Create这么一个方法,在这个方法里我们可以决定如何分析配置节的XML,以向外提供一个系统可以认识的一种配置结构。我很顺理成章的就决定用XML序列化的方法来实现配置文件XML字串与配置设置类之间的转化。
第一步先要设计一些配置设置的类,签到终端程序的配置基本上可以分下数据库、通讯、硬件及其他这四个部分(在管控端还有菜单、工具栏等等)。类的设计没什么好说的,重要的就是要注意一些XmlAttribute的运用,这些东西在XML序列化时会派上用场。关于配置设置类举一个简单但比较齐全的例子,其中即有Element,又有Attribute,而且还有不用序列化的属性。
下面是数据方面的配置设置
![](/Images/OutliningIndicators/ContractedBlock.gif)
(因为这个配置设置类在管控端只需要一个数据库连接串即可,但为此多写一个类又觉得心有不甘,所以偷懒加了个编译指令双方可以共用)
相应的在配置文件里的配置就象下面这个样子:
<Data Local="DGkDBWoADigKLAIMkiOk+vy5sd5Dg=="
Remote="DGnRBWoADiH4jOnb4uqjdE5ZQmEIsVw==">
<Detect-ms>1000</Detect-ms>
<Sync-ms>1000</Sync-ms>
</Data>
二头的东西都具备,现在写中间的配置节处理程序。因为配置节比较多,而且每一个处理程序的写法都是一样的,所以又多了个处理程序的基类。
![](/Images/OutliningIndicators/ContractedBlock.gif)
上面HandlerSectionObjectMap.Dictionary里存放着各个SectionHandler与具体的配置设置类的类型的映射。
SetSection方法则是为写配置文件而准备的,其实就是一个XML序列化的过程(而Create则是反序列化过程)。
这样以后,只要在应用里写ConfigurationSettings.GetConfig("Data") as DataCfg就可以把配置文件的配置读出来了。当然最后别忘了在配置文件的开头加上相应的<section>,比如:
<section name="Data"
type="SectionHandler.DataSectionHandler,Common" />
一贴代码这文章就长了好多,今天先到这儿了,写配置文件的问题下篇再述。