• 基于kbmMW Configuration Framework 实现配置文件对象化


    实做一个应用,一般情况下,我们总要为之做一个配置文件,用来设置象数据库联接参数等信息,然后用TIniFile或者注册表对象来读写。为此,kbmMW为我们带来更好用的方式,让代码维护起来更优雅。

    如果你对kbmMW Configuration Framework一无所知,可以先看看译的博文,大体先了解一下工作原理与基本使用方法:Configuration REST easy with kbmMW #7以及窑洞洞主xalion写的使用kbmMWConfiguration 让 kbmmw smartservice 更聪明

    如果功课做完,接下来,就可以看看我在项目中实现自己的配置对象:

    第一步,定义自己的配置对象类:

      TConfigurableObject = class(TkbmMWConfigurableObject)
      private
        [kbmMW_Config('Host',mwcdReadWrite)]
        FHost: string;
    
        [kbmMW_Config('Host',mwcdReadWrite)]
        FPort: string;
      public
    
        property Host:string read FHost write FHost;
        property Port:string read FPort write FPort;
      end;

    为了易读,上面代码做了简化,Host,指服务器的地址,Port指服务器的端口。

    第二步,定义配置对象的存储:

    在同一单元的initialization段,用如下代码实现。这里,我用的xml格式在执行文件同目录下保存xml文件,命名为config.xml。注意:这一步是可选择的,如果不处理,config对象会自动在执行文件当前目录生成xxxx_config.xml文件。

    initialization
    
    Config.Storage:=TkbmMWXMLConfigurationStorage.Create(GetApplicationPath('config.xml'));//注意:这一步是可选择的,如果不处理,config对象会自动在执行文件当前目录生成xxxx_config.xml文件。

    第三步,在同一单元的initialization段,注册TConfigurableObject,让config对象能够通过xml文件读写这个他。

    initialization
    
    Config.Storage:=TkbmMWXMLConfigurationStorage.Create(GetApplicationPath('config.xml'));
    
    kbmMWRegisterKnownClass(TConfigurableObject);

    第四步,使用自定义的配置对象TConfigurableObject

    在MainDatamodule单元中,声明一个类型为TConfigurableObject的对象,然后通过该对象的属性,就可以读取与设置配置文件了。

    最后,还要注意其他的问题:

    默认情况下,kbmMW Configuration Framework自动备份五次配置文件,如果不需要,按下面代码:

    initialization
    
    Config.Storage:=TkbmMWXMLConfigurationStorage.Create(GetApplicationPath('config.xml'));
    Config.Storage.BackupMaxCount:=-1;//不生成备份文件.

    全局的Config对象与配置对象的关系,这个我们也要知道,默认情况下,配置对象的Configuration属性,即指向Config,象上面的代码,就是这样的关系。知道了这个关系,我们就可以实现的配置对象的读写,有些时候,当我们修改了配置文件的属性,想立即写入配置文件,用下面的代码:

      ConfigObject.Configuration.Storage.Save;

    这看起来很啰嗦,作者为我们封装了一个方法:

    ConfigObject.WriteConfig;//写配置文件内容。

    同样,还有一个读方法:

    ConfigObject.ReadConfig;//读配置文件
  • 相关阅读:
    查看tls指纹
    并行流
    方法引入2
    方法引入
    Optional.ofNullable
    stream.filter
    stream.skip limit
    反射
    Optional orElseGet
    nginx 预压缩(gzip)
  • 原文地址:https://www.cnblogs.com/kinglandsoft/p/13510676.html
Copyright © 2020-2023  润新知