在学习了Duwamish和.Text的配置方法后,对两者的配置持久化做一个比较。

以ApplicationConfiguration为例,Duwamish的配置文件中的<ApplicationConfiguration>...</ApplicationConfiguration>部分对应于Duwamish.SystemFramework.ApplicationConfiguration类,

  <configSections>
    <section name="ApplicationConfiguration" type="Duwamish7.SystemFramework.ApplicationConfiguration, Duwamish7.SystemFramework" />
    ...
  </configSections>
    ...
  <ApplicationConfiguration>
    <add key="SystemFramework.Tracing.Enabled" value="False" />
    <add key="SystemFramework.Tracing.TraceFile" value="C:\Program Files\Microsoft Visual Studio .NET 2003\Enterprise Samples\Duwamish 7.0 CS\.\DuwamishTrace.txt" />
    <add key="SystemFramework.Tracing.TraceLevel" value="4" />
    <add key="SystemFramework.Tracing.SwitchName" value="DuwamishTraceSwitch" />
    <add key="SystemFramework.Tracing.SwitchDescription" value="Error and information tracing for Duwamish" />
    <add key="SystemFramework.EventLog.Enabled" value="True" />
    <add key="SystemFramework.EventLog.Machine" value="." />
    <add key="SystemFramework.EventLog.SourceName" value="Duwamish7" />
   <add key="SystemFramework.EventLog.LogLevel" value="1" />
  </ApplicationConfiguration>

ApplicationConfiguration类实现了System.Configuration.IConfigurationSectionHandler接口,需要实现一个create()方法,该方法将在调用System.Configuration.GetConfig()方法时自动被调用。在ApplicationConfiguration中有大量的private变量和与这些变量相对应的静态public属性,但这些public属性仅实现了get{},而不实现set{}。例如,TracingEnabled属性的实现:

public static bool TracingEnabled
{
    get
   {
      return tracingEnabled;
   }
}

其中,tracingEnabled为ApplicationConfiguration的私有变量。
另外,在ApplicationConfiguration类中还实现了一个ReadSetting方法,共有四个重载函数,分别提供int,string, bool, TraceLevel四种不同配置类型的设置读取功能。以下为读取string类型的ReadSetting的实现

        public static String ReadSetting(NameValueCollection settings, String key, String defaultValue)
        {
            try
            {
                Object setting = settings[key];
                
                return (setting == null) ? defaultValue : (String)setting;
            }
            catch
            {
                return defaultValue;
            }
        }

另一个重要方法是OnApplicationStart(),它是一个静态方法,在Global.asa中的Application_Start()事件中被调用,用于在web站点被访问前,将设置读入System.Configuration.ConfigurationSettings中,而ReadSetting方法正是从ConfigurationSettings中读出设置的。ReadSetting的参数settings是通过baseHandler.Create()方法获得ConfigurationSettings的引用的,如下所示

            NameValueSectionHandler baseHandler = new NameValueSectionHandler();
                settings = (NameValueCollection)baseHandler.Create(parent, configContext, section);

在配置文件中,我发现一个有趣的现象,add项中的key值为一些不存在类和属性

<add key="SystemFramework.Tracing.Enabled" value="False" />

在以上代码中,SystemFramework.Tracing根本不存在,更不用说Enabled属性了。实际上,这个key仅仅用于标识变量,如果要读取这个设置就可以用ReadSetting(settings,"SystemFramework.Tracing.Enabled",defaultValue)完成,而从web页中读取这个设置则可以用SystemFramework.ApplicationConfiguration.TracingEnabled静态属性。

如果我们想使配置文件与上层的类相对应,可以考虑创建一个SystemFramework.Tracing类(见下图),并加入Enabled属性,然后在Enabled属性中调用SystemFramework.ApplicationConfiguration.TracingEnabled,这样就可以根据类来对配置进行有效分类,同时,也保证配置结构与上层结构的一致

namespace SystemFramework
{
     class Tracing
     {
          
          public static bool Enabled
          {
              get{return ApplicationConfiguration.TracingEnabled;}
          }
          
     }
}

最后是我画的配置持久化模型图:
 
参考:
《Duwamish深入剖析-配置篇》http://www.aspcool.com/lanmu/browse1.asp?ID=1045&bbsuser=aspnet

转载于:https://www.cnblogs.com/tonyqus/archive/2004/12/11/75725.html

Duwamish配置持久化学习笔记相关推荐

  1. Web全栈架构师(三)——NodeJS+持久化学习笔记(2)

    NodeJS+持久化学习笔记 持久化 nodejs中实现持久化的方法 文件系统数据库 MySQL 资源 安装配置 node.js原生驱动 Sequelize 基本使用: Getters & S ...

  2. 携程 Apollo 配置中心 | 学习笔记(七) | 如何将配置文件敏感信息加密?

    携程 Apollo 配置中心 | 学习笔记(一) Apollo配置中心简单介绍 携程 Apollo 配置中心 | 学习笔记(二) Windows 系统搭建基于携程Apollo配置中心单机模式 携程 A ...

  3. MSP432安装与环境配置(ccs) 学习笔记

    MSP432安装与环境配置(ccs) 学习笔记   关闭电脑病毒防护 继续 选择ccs的安装文件路径 选择要安装的类型 选择使用工作区目录存储其首选项和开发文件路径 使用usb接入432 关闭安装ms ...

  4. 多路径配置udev_学习笔记:Linux多路径配置 multipath实现设备用户组绑定详细设置...

    天萃荷净 Linux多路径软件配置,通过multipath实现设备用户组绑定详细设置 现在的Linux系统中,很多都会使用系统自带的multipath多路径软件,在以前的版本中,我们一般通过multi ...

  5. Oracle 加密配置,【学习笔记】Oracle sqlnet设置网络传输加密案例

    天萃荷净 Database Advanced Security,Oracle研究中心学习笔记:分享一篇关于Oracle数据库网络传输加密笔记,通过配置SQLNET.ora文件使网络传输加密即将客户端也 ...

  6. .NET 云原生架构师训练营(模块二 基础巩固 配置)--学习笔记

    2.2.3 核心模块--配置 IConfiguration Options ASP.NET Core 中的配置:https://docs.microsoft.com/zh-cn/aspnet/core ...

  7. Redis 持久化(学习笔记五)

    持久化:RDB AOF RDB:快照  bgsave以子进程的方式使用 RDB保存在dir目录,文件名dbfilename,设置压缩:rdbcompression RDB没办法实时, AOF:以日志方 ...

  8. MyBatis MapperScannerConfigurer配置——MyBatis学习笔记之八

    在上一篇博文的示例中,我们在beans.xml中配置了studentMapper和teacherMapper,供我们需要时使用.但如果需要用到的映射器较多的话,采用这种配置方式就显得很低效.为了解决这 ...

  9. 【DAY2】hadoop 完全分布式模式配置的学习笔记

    hadoop端口 ---------------- 1.namenode 50070 http://namenode:50070/ 2.resourcemanager:8088 http://loca ...

最新文章

  1. 简单了解request与response
  2. 三星在研发VR一体机?眼动追踪公司曝出原型机
  3. linux介绍及目录结构(一)
  4. 科大星云诗社动态20210823
  5. Zabbix 2.2(一):Web监控的监控项
  6. Netgear业务交换机被曝15个漏洞,有些不修复
  7. string 与stringbuilder的区别
  8. 数据结构 Java数据结构 --- 反射
  9. 实战:VM Player导入虚机到ESXi
  10. [spm操作] VBM分析中,modulation的作用
  11. 搜集一些常见国家语言Unicode编码范围
  12. EOS Bios Boot Sequence 启动步骤
  13. The number of method references in a .dex file cannot exceed 64K
  14. 猿辅导python大纲_数据解读独角兽企业“猿辅导”(第一部分)
  15. IP地址管理常见功能解析
  16. 教你如何使用语雀提高效率
  17. 地理思维导图怎么画?五步教你思维导图画法
  18. 第32期:索引设计(索引设计详细规范)
  19. ByteBuffer Converting CharBuffer
  20. Linux Top 详细介绍,包含task排序

热门文章

  1. (priority_queue)自定义优先级
  2. java中函数_java中的函数
  3. mysql和维信公众号_mysql实用指南
  4. ❤️六W字《计算机基础知识》(四)(建议收藏)❤️
  5. 《零基础》MySQL 超级入门教程
  6. 中如何对一个数取余_如何找到自己在一个城市中的定位?
  7. 已知圆心,半径,角度,求圆上的点坐标
  8. 两万字详细爬虫知识储备,数据采集与清洗基础习题(一)头歌参考答案
  9. swift面向对象之多态与继承
  10. 怎么样递增的注册成对的点云