当前位置: 首页 > article >正文

PB语言实现控制反转(IoC)

PB语言实现控制反转(IoC)

PBIoC是一个以C++开发的,实现PB语言控制反转功能的项目。基于此项目,PB能够将对象的生命周期、依赖关系以及属性的加载托管给IoC容器。

1、项目构成

本项目包含的类及相应功能说明如下:

类名功能
PBIoCIoC容器,管理组件的生命周期、依赖关系、属性自动装配
PBComponent组件,在IoC容器中以单例模式存在

2、项目依赖

PB10及以上环境,项目中导入PowerProject.IoC.dll即可使用

3、功能概要

3.1、PBIoC

PBIoC为IoC容器,主要有以下功能:

1. 加载配置信息初始化容器
2. 获取容器中的组件,按配置信息创建对象、窗口和控件
3. 按配置信息批量注入全局变量、共享变量、实例变量

方法列表如下:

方法名参数列表说明
load_configstring加载配置文件
set_configstring, string, any设置配置信息
scan_libraries扫描当前项目PBL或PBD,创建组件
scan_librarystring, …扫描具体的PBL或PBD,创建组件
get_componentstring按名称获取组件对象
new_objectstring按类名创建对象并注入属性
open_windowstring按窗口名打开窗口并注入属性
open_windowstring, Window按窗口名打开子窗口并注入属性
open_userobjectstring, GraphicObject, int, int按控件类名创建控件并注入属性
open_tabstring, Tab创建页签对象并注入属性
load_global_variables注入全局变量
load_shared_variablesstring注入共享变量
load_instance_variablesPowerObject注入对象的实例变量

3.2、PBComponent

PBComponent为容器组件,主要有以下功能:

  1. 组件的继承类能够被IoC容器扫描,从而在容器中实例化该组件
  2. 动态访问自身的属性和方法

方法列表如下:

方法名参数列表说明
get_fieldstring按名称获取属性值
set_fieldstring, any按名称设置属性值
invoke_methodstring按方法名动态调用无参方法
invoke_methodstring, any, …按方法名动态调用有参方法
invoke_method_with_signaturestring, string按方法名及方法签名动态调用无参方法
invoke_method_with_signaturestring, string, any, …按方法名及方法签名动态调用有参方法

4、快速入门

4.1、注入组件属性并从容器获取组件的实例

  1. 创建 PBComponent 的子类 n_animal ,编辑实例变量:

    public:
    	string name
    	int age
    	date birth_date
    	boolean alive
    
  2. 创建配置文件 application.json,内容如下:

    {
    	"n_animal":{
    		"name":"Jar",
    		"age": 2,
    		"birth_date":"2021-03-14",
    		"alive":true
    	}
    }
    
  3. application 创建全局变量:

    PBIoC ioc
    

    application open 事件编辑代码,创建 PBIoC 实例并加载配置文件、扫描当前PBL:

    ioc = create PBIoC
    ioc.load_config('application.json')
    ioc.scan_libraries()
    
  4. 执行以下代码:

    n_animal a
    a = ioc.get_component('n_animal')
    
  5. 执行结果如下:

在这里插入图片描述

4.2、打开窗口自动注入实例变量

  1. 创建窗口 w_test ,编辑实例变量:

    private:
    	string user_name
    	datetime login_time
    
  2. 编辑配置文件 application.json,内容如下:

    {
    	"w_test":{
    		"user_name":"Jason",
    		"login_time":"2023-03-24 20:48:00"
    	}
    }
    
  3. application 创建 PBIoC 全局变量及 open 事件与4.1一致

  4. 执行以下代码:

    window w
    w = ioc.open_window('w_test')
    
  5. 窗口正常打开,执行结果如下:

在这里插入图片描述

4.3、调用对象的Setter方法注入属性

  1. 修改4.1中的 n_animal 类,增加方法:
    在这里插入图片描述

  2. 配置文件、application 创建 PBIoC 全局变量及 open 事件与4.1一致

  3. 执行以下代码:

    n_animal a
    a = ioc.get_component('n_animal')
    
  4. 执行结果如下:

在这里插入图片描述

  1. 跟4.1相比, n_animal 类存在 set_name 方法,注入 name 属性实际是调用了 set_name 方法,而非直接赋值 name 属性

WX、TEL:18649713925
QQ:768310524


http://www.kler.cn/a/7228.html

相关文章:

  • 华东师范大学数学分析第五版PDF习题答案上册及下册
  • Excel SUMIFS
  • Visual Studio 2017 快捷键设置-批量注释和批量取消注释
  • 大数据如何助力干部选拔的公正性
  • Redis基础篇
  • 【人工智能】迁移学习在深度学习中的应用:用Python实现自定义数据集图像分类
  • 【SQL开发实战技巧】系列(三十四):数仓报表场景☞如何对数据分级并行转为列
  • WangEdtior富文本编辑器
  • echarts圆形统计图与柱状图结合
  • 少儿编程 电子学会图形化编程等级考试Scratch二级真题解析(判断题)2022年12月
  • 将本地项目上传到远程仓库的步骤
  • 2.5.3 乘法
  • 【C++从0到1】14、C++中逻辑运算
  • chatGPT 又来帮忙了
  • C++ Primer第五版练习题冲冲冲
  • 卡顿优化小结
  • 计算机视觉的应用1-OCR分栏识别:两栏识别三栏识别都可以,本地部署完美拼接
  • 从零开始实现一个C++高性能服务器框架----Socket模块
  • 【分享】免梯子的GPT,玩 ChatGPT 的正确姿势
  • 《底层逻辑》读书笔记
  • python的元类
  • IDEA中查看源码点击Download Sources时出现Cannot download sources的问题复现及解决
  • C++ Primer第五版_第十章习题答案(31~40)
  • leetcode53:最大子数组和
  • Kotlin 基础语法
  • 【数据库运维】mysql备份恢复练习