简阳电力建设立项网站,可以做英文单词puzzle的网站,网页制作软件有哪些,葫芦岛网站建设找思路上次用到配置文件,就花了一些时间研究了一下.Net2.0下的配置文件架构,当时感觉确实很强大,完善,但看的有些头晕.迷迷糊糊把实现了要求,就没有再深入研究.最近,想在配置文件里实现一个复杂的配置,多层次嵌套的配置文件,再把.Net中的配置文档研究了一下#xff0c;经过这两次的研…上次用到配置文件,就花了一些时间研究了一下.Net2.0下的配置文件架构,当时感觉确实很强大,完善,但看的有些头晕.迷迷糊糊把实现了要求,就没有再深入研究.最近,想在配置文件里实现一个复杂的配置,多层次嵌套的配置文件,再把.Net中的配置文档研究了一下经过这两次的研究终于彻底搞清楚了。在博客园里已经看到了一篇文章提到了新的配置的研究地址在这里 http://www.cnblogs.com/Xrinehart/archive/2005/12/03/289978.html 疾风 风行者。文中提到了几个问题我先补充一下。引用OpenMappedExeConfiguration()有两种重载我只尝试成功了上述这种另外一种说是可以从指定配置文件中得到配置对象但我没成功过谁要是搞明白了记得告诉我下。 1 ExeConfigurationFileMap filemap new ExeConfigurationFileMap();2 filemap.ExeConfigFilename AppDomain.CurrentDomain.SetupInformation.ApplicationBaseschema.config;3 Configuration config;4 config ConfigurationManager.OpenMappedExeConfiguration(filemap, ConfigurationUserLevel.None);56 以上这个方法就可以打开任意的配置文件。引用请教一下如果有类似下面的树型结构有没有好的方法吗 job nameall job namepower commandpower on/ job nametest tv job namestep1.1 commandturn on tv / job namestep1.2 commandturn off tv / 这个功能是完全可以实现的。方法如下示例如下 [ConfigurationProperty(jobs)] [ConfigurationCollection(typeof(JobCollection), AddItemNamejob)] public JobCollectionSchemaCollection { get { return (JobCollection)this[jobs]; } set { this[jobs] value; } }AddItemName只要设置了AddItemName这个属性显示出来的配置文件就是你要求的那样了。从这里也可以看出.Net的架构非常全面很多功能可能我们都还没有用起来。我是从System.Configuration命名空间开始研究的。从使用架构的角度我着重研究了以下几个类的功能。ConfigurationElementConfigurationElementCollectionConfigurationSectionConfigurationSectionGroup我认为如果要自定义强类型的配置内容理解以下内容非常重要。假设我现在的命题是要读写如下的配置文件 DataBaseSchemaConfig Schemas add SchemaNameTestDataBase SchemaVersion1.0 SchemaFlag1_0 / add SchemaNameTestDataBase2 SchemaVersion1.1 SchemaFlag1_1 Tables add TableNameT_TEST_TABLE TableDesc测试表 Columns add ColumnNameID ColumnDesc标识 ColumnTypeSystem.Int32 / add ColumnNameName ColumnDesc名称 ColumnTypeSystem.String / add ColumnNameDesc ColumnDesc描述 ColumnTypeSystem.String / /Columns /add /Tables /add /Schemas /DataBaseSchemaConfigSectionGroup就是一组Session这个很好理解。Section是配置文件中一个节。每一个节都对应了系统中的一个强类型的Section对象该Section对象将用来处理对应的Section。如果你用系统内置的一些Section对象那么配置文件的内容就会受到很大的限制。从Configuration的架构来看应当是派生自己的Section对象用来处理自己的需求。好下面就上面的命题来看看实现首先我们需要一个根节点我定义为 public sealed class DataBaseSchemaConfigSection : ConfigurationSection {该节点作为整个配置节的入口。 从配置文件可以看出根节下面是一个Schemas元素。里面包含了很多Schema元素。可以看出这是一个集合。所以很自然的我们应当在DataBaseSchemaConfigSection中加入一个集合对象这个集合对象用来管理Schema元素对应的对象也就是我们需要一个 ConfigurationElementCollectionpublic sealed class DataBaseSchemaCollection : ConfigurationElementCollection这个对象就可以用来管理下面的Schema对象public sealed class DataBaseSchemaSection : ConfigurationSection再往下实际和前面的型式完全一样是一层一层嵌套下来的。public sealed class DataBaseTableCollection : ConfigurationElementCollectionpublic sealed class DataBaseTableSection : ConfigurationSectionpublic sealed class DataBaseColumnCollection : ConfigurationElementCollectionpublic sealed class DataBaseColumnSection : ConfigurationSection实际上整个的配置文件就是SectionConfigurationElement的反复使用。理解了整个架构之后就可以非常轻松的写出读写自己自定义的配置信息。从对象到配置文件中的对应是通过对象的自定义属性实现的。如 [ConfigurationProperty(ColumnName,IsKeytrue,IsRequiredtrue)] public string ColumnName { get { return (string)this[ColumnName]; } set { this[ColumnName] value; } } 实际对象的属性数据是保存在祖先类中的你需要作的是强类型转换成你自己类型。另外在自定义属性中最重要的是元素名称有可能是Section名称也可能是作为元素的属性名称。差不多理解到这里基本的应用就应当没有问题了。再深入研究一下基实自定义配置的序列化也是可以控制的。准备以后有需要的时候再进行研究。 转载于:https://www.cnblogs.com/goldpicker/archive/2006/08/25/486675.html