Sloth组件之NetRisc.Configuration
这个组件包含一个配置管理器、一个配置读取器、一个配置书写器以及一个简化了的树形文档结构(标准的Xml文件也是一个树形结构),你可以在此基础上开发基于Sloth框架的配置工具,当然也可以选择像我们一样将自己的作品开源,让感兴趣的开发爱好者发表自己的意见,而这些宝贵的意见正是我们整个项目的动力。
下面从命名空间NetRisc.Configuration中的类的关系图开始来介绍一下这个组件,以及它的工作方式。
<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />
NetRisc.Configuration Class diagram:
<?xml:namespace prefix = v ns = "urn:schemas-microsoft-com:vml" />
NetRisc.Configuration.ConfigurationManager类
用于管理全局配置文件中存放的各个独立配置文件的路径,独立配置文件的路径保存的是完整的路径,通过该类实现WinForm程序和Web程序都能够访问到各个独立的配置文件,同时管理存储在全局配置文件GlobalConfiguration.xml中的各个独立配置文件路径。
一个通常的全局配置文件GlobalConfiguration.xml看起来像下面这个样子:
<GlobalConfigurations>
<Settings>
<SettingItem name="OragnizationType">ConfigurationPerAssembly</SettingItem>
</Settings>
<Configurations>
<ConfigurationItem ParentContainerName="netrisc.database.dbaccess.dll">F: \NetRisc\bin\Debug\NetRisc.DataBase.DBAccess.dll.xml</ConfigurationItem>
</Configurations>
</GlobalConfigurations>
你可以看到里面保存了一个netrisc.database.dbaccess.dll的配置文件的路径:
F: \NetRisc\bin\Debug\NetRisc.DataBase.DBAccess.dll.xml,也就是说组件netrisc.database.dbaccess.dll的配置文件NetRisc.DataBase.DBAccess.dll.xml存放在
F: \NetRisc\bin\Debug\目录下(而全局配置文件本身应该与NetRisc.Configuration.dll组件存放在相同的目录,虽然你可以在实例化ConfigurationManager对象的时候指定全局配置文件的位置,但是我们不推荐这么做)。那么知道了组件的配置文件在哪里,接下来当然是考虑怎么读取这个配置文件。
NetRisc.Configuration.ConfigurationReader类
这个类用于读取各个组件的独立配置文件。该类事例的获取应该使用ConfigurationManager对象的.GetConfigurationReader(string parentContainerName)来获取,正如你看到的那样GetConfigurationReader()方法接受一个容器名称(通常为组件所在程序集的名称)作为参数来获取该程序集(组件)的配置文件读取器对象。和上面全局配置文件实例对比你就可以发现"netrisc.database.dbaccess.dll"正是程序集的名称。
你可以通过下面的代码来获取当前代码运行所在的程序集名称:
C#:
assemblyName = System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name;
VisualBasic.NET:
assemblyName = System.Reflection.Assembly.GetExecutingAssembly().ManifestModule.Name
看到这里你是不是已经跃跃欲试想动手写代码了呢?先别急,我们先考察一个独立配置文件的样例,看看下面这段配置文件的内容:
<Configurations>
<ConfigurationItem name="DefaultDataSourceConfiguration">
<Attributes>
<DatabaseOperatorFactoryName>NetRisc.Database.DBAccess.dll</DatabaseOperatorFactoryName>
<ConnectionString>An oracle database connection string gose here.</ConnectionString>
<Encryption>Disabled</Encryption>
<FactoryClassName>NetRisc.Database.DBAccess.OracleOperator</FactoryClassName>
</Attributes>
<Values />
<ConfigurationItems />
</ConfigurationItem>
</Configurations>
以下是我们已有的Sloth配置工具的展示界面(工具将在近期提供下载)
对比该配置文件的树形结构我们可以了解配置文件的结构是怎么样的。每一个配置节点Node包含属性集合,值集合以及一个子配置节点集合,这样的结构使他们可以产生我们需要的树形配置文件结构。
当你已经获取到了期望的配置文件读取器,接下来怎么读取配置信息呢?要说明一点的是当你获取配置文件读取器的同时,配置文件读取器对象内部已经将对应的配置文件信息加载到内存中并以树或者森林的形式存放。通过配置文件读取器对象的配置节点集合ConfigurationReader. Configurations属性可以获取配置文件的二级配置节点(因为所有的独立配置文件,甚至标准的xml配置文档都有一个根节点,而在这里为了便于查找,ConfigurationReader隐藏了根节点直接向外部公布了二级节点作为森林中每棵树的根节点)
ConfigurationReader. Configurations属性是一个NodeCollection类型的集合,你可以通过重载的索引器NodeCollection[string configurationItemName]使用配置节点的名称来快速的找到集合中需要的配置节点对象,同样在一个配置节点对象中的Attributes属性(该属性是一个AttributeCollection类型的集合)可以通过AttributeCollection的索引器[string name]使用属性名称快速的在集合中找到需要的属性对象。
例如:根据上面的独立配置文件实例,假设我们已经获取了配置文件读取器对象cfgReader,那么要获取DefaultDataSourceConfiguration中的属性FactoryClassName的值,请考察下面的代码:
C#:
string value = cfgNode.Attributes[“FactoryClassName”].Value;
VisualBasic.NET:
Dim value As String = cfgNode.Attributes(“FactoryClassName”).Value
这样value中应该保存的是” NetRisc.Database.DBAccess.OracleOperator”,是不是很简单呢?J。ValueCollection也可以使用同样的方法获取值集合。
通常在程序运行过程中,程序自身不会修改配置文件内容,所以到这里配置文件的读取就可以正常工作了。什么?手工编写配置文件…开始头痛…是的,到目前为止你只能使用所了解到的配置文件的结构手工编写配置文件,你会发现这是一个繁琐的事情,有什么好的解决办法没有呢?当然有,NetRisc.Configuration命名空间中还提供了一个有用的类NetRisc.Configuration.ConfigurationWriter,这个一看就知道用来做什么的了啦。
NetRisc.Configuration.ConfigurationWriter类
该类用于将内存中树形的配置结构写入到xml配置文件中。同ConfigurationReader类似,我们也建议你只通过ConfigurationManager.GetConfigurationWriter()方法获取一个配置文件写入器,方法ConfigurationManager.GetConfigurationWriter()的参数与获取配置文件读取器的方法参数意思一样。通过调用ConfigurationWriter. WriteConfigurationTree ()方法可以将参数指定的树形配置结构写入到xml配置文件中。假设我们已经获取了名为cfgWriter的配置写入器对象,考察下列代码:
C#:
cfgWriter.Save();
VisualBasic.NET:
cfgWriter.Save()
到这里NetRisc.Configuration命名空间中的类的主要功能都介绍完了,什么?没有配置工具?有了NetRisc.Configuration.ConfigurationWriter类还怕什么,您完全可以发挥想象力以自己习惯的方式开发出通用的配置工具以及专用配置工具。
当然,我们先已有一个针对Sloth的专用配置工具,将于近期提供下载。
本篇介绍就到这里啦,谢谢关注!J敬请期待Sloth其他组件的介绍文章。
Sloth简介(一)
http://www.cnblogs.com/duochunyu/articles/536135.html
Sloth简介(二)
http://www.cnblogs.com/duochunyu/articles/538654.html
Sloth简介之Demo实战(一)
http://www.cnblogs.com/duochunyu/articles/541343.html
NetRisc.Configuration组件源代码下载
http://files.cnblogs.com/duochunyu/NetRisc.Configuration_Code_061031.rar
转载于:https://www.cnblogs.com/duochunyu/archive/2006/10/31/545197.html
Sloth组件之NetRisc.Configuration相关推荐
- 【Android FFMPEG 开发】FFMPEG 交叉编译配置 ( 下载 | 配置脚本 | 输出路径 | 函数库配置 | 程序配置 | 组件配置 | 编码解码配置 | 交叉编译配置 | 最终脚本 )
文章目录 一.FFMPEG 源码下载 解压 二.交叉编译工具 三.configure 脚本及帮助命令 四.配置 configure 脚本 五.输出目录配置 六.函数库配置 七.程序配置选项 八.组件配 ...
- @configuration注解_超级全面的 SpringBoot 注解介绍,每一个用途都应该清晰
一.注解(annotations)列表 1.@SpringBootApplication 包含了@ComponentScan.@Configuration和@EnableAutoConfigurati ...
- SpringBoot中注册Servlet三大组件
SpringBoot中默认内置了Servlet容器,Tomcat.SpringBoot默认是以jar包的方式启动内置的Servlet容器,没有web.xml文件.所以只能通过自定义servlet配置. ...
- RaSa2.5.x配置之二:管道组件(Pipeline Components)
目录 语言模型(Language Models) MitieNLP SpacyNLP HFTransformersNLP 分词器(Tokenizers) WhitespaceTokenizer Jie ...
- @configuration注解_SpringBoot的@Configuration扫盲
@Configuration注解标识的类中声明了1个或者多个@Bean方法,Spring容器可以使用这些方法来注入Bean,比如: @Configuration public class AppCon ...
- Commons 组件学习笔记
目录 目录 Commons 组件在apache官网有详细的资料深入学习的可以在官网查询API及相关资料 Commons 介绍 Commons Lang 组件简介 数组元素的增加 AarryUtils类 ...
- Spring5注解编程基础组件
文章目录 1 配置组件(Configure Components) @Configuration 注解 @ComponentScan 注解 a.演示basePackageClasses参数,如我们把配 ...
- 4_Spring常用的Annotation组件
Spring常用的Annotation组件 配置组件 Configure Components @Configuration @Autowired @Qualifier @Resource(name= ...
- Java - 框架之 SpringBoot 攻略day01
Spring-Boot 攻略 day01 spring-boot 一. 基本配置加运行 1. 导入配置文件(pom.xml 文件中) <parent> <groupId>org ...
- 超级全面的 SpringBoot 注解介绍,每一个用途都应该清晰
点击上方蓝色"方志朋",选择"设为星标" 回复"666"获取独家整理的学习资料! 作者:riemann blog.csdn.net/qq_3 ...
最新文章
- 【C++】利用构造函数对类对象进行初始化
- 人类为什么更聪明 | 人脑神经元关键结构差异被揭示
- 防止Excel导入超大带格式文本乱码的方法
- UIActionSheet
- centos 系统管理维护指南
- 做生意最重要的诚信呢??? | 今日最佳
- leetcode 406. 根据身高重建队列(贪心算法)
- 互联网商业模式:增值还是减值?
- 微软推出 Power Platform 漏洞奖励计划
- Java ADF Template程序不能连接ArcGIS Server问题
- 【GDB调试学习笔记】调试逻辑错误
- 单片机编程技巧—状态机编程
- rimworld简单机器人mod_rimworld分类技能机器人mod
- 配置扩展IP ACL实验
- 寒霜3引擎再造经典极品飞车18
- 使用Pr CS6剪视频导入的视频中音频一直出现“在试图写入下列文件时发生了错误…”提示在右下角。?
- 苹果CMS海螺模板4.0修复版带后台 附安装教程
- 【项目】用户可自定义简易宏键盘
- seo日常工作表_SEO日常工作内容主要有哪些
- (详细介绍)程序员专属接单平台,赚钱的同时提升自己的技术,并附多个快速开发的脚手架项目开箱即用