PB语言实现控制反转(IoC)
PB语言实现控制反转(IoC)
PBIoC是一个以C++开发的,实现PB语言控制反转功能的项目。基于此项目,PB能够将对象的生命周期、依赖关系以及属性的加载托管给IoC容器。
1、项目构成
本项目包含的类及相应功能说明如下:
类名 | 功能 |
---|---|
PBIoC | IoC容器,管理组件的生命周期、依赖关系、属性自动装配 |
PBComponent | 组件,在IoC容器中以单例模式存在 |
2、项目依赖
PB10及以上环境,项目中导入PowerProject.IoC.dll即可使用
3、功能概要
3.1、PBIoC
PBIoC为IoC容器,主要有以下功能:
1. 加载配置信息初始化容器
2. 获取容器中的组件,按配置信息创建对象、窗口和控件
3. 按配置信息批量注入全局变量、共享变量、实例变量
方法列表如下:
方法名 | 参数列表 | 说明 |
---|---|---|
load_config | string | 加载配置文件 |
set_config | string, string, any | 设置配置信息 |
scan_libraries | 扫描当前项目PBL或PBD,创建组件 | |
scan_library | string, … | 扫描具体的PBL或PBD,创建组件 |
get_component | string | 按名称获取组件对象 |
new_object | string | 按类名创建对象并注入属性 |
open_window | string | 按窗口名打开窗口并注入属性 |
open_window | string, Window | 按窗口名打开子窗口并注入属性 |
open_userobject | string, GraphicObject, int, int | 按控件类名创建控件并注入属性 |
open_tab | string, Tab | 创建页签对象并注入属性 |
load_global_variables | 注入全局变量 | |
load_shared_variables | string | 注入共享变量 |
load_instance_variables | PowerObject | 注入对象的实例变量 |
3.2、PBComponent
PBComponent为容器组件,主要有以下功能:
-
组件的继承类能够被IoC容器扫描,从而在容器中实例化该组件
-
动态访问自身的属性和方法
方法列表如下:
方法名 | 参数列表 | 说明 |
---|---|---|
get_field | string | 按名称获取属性值 |
set_field | string, any | 按名称设置属性值 |
invoke_method | string | 按方法名动态调用无参方法 |
invoke_method | string, any, … | 按方法名动态调用有参方法 |
invoke_method_with_signature | string, string | 按方法名及方法签名动态调用无参方法 |
invoke_method_with_signature | string, string, any, … | 按方法名及方法签名动态调用有参方法 |
4、快速入门
4.1、注入组件属性并从容器获取组件的实例
-
创建 PBComponent 的子类 n_animal ,编辑实例变量:
public: string name int age date birth_date boolean alive
-
创建配置文件 application.json,内容如下:
{ "n_animal":{ "name":"Jar", "age": 2, "birth_date":"2021-03-14", "alive":true } }
-
application 创建全局变量:
PBIoC ioc
application open 事件编辑代码,创建 PBIoC 实例并加载配置文件、扫描当前PBL:
ioc = create PBIoC ioc.load_config('application.json') ioc.scan_libraries()
-
执行以下代码:
n_animal a a = ioc.get_component('n_animal')
-
执行结果如下:
4.2、打开窗口自动注入实例变量
-
创建窗口 w_test ,编辑实例变量:
private: string user_name datetime login_time
-
编辑配置文件 application.json,内容如下:
{ "w_test":{ "user_name":"Jason", "login_time":"2023-03-24 20:48:00" } }
-
application 创建 PBIoC 全局变量及 open 事件与4.1一致
-
执行以下代码:
window w w = ioc.open_window('w_test')
-
窗口正常打开,执行结果如下:
4.3、调用对象的Setter方法注入属性
-
修改4.1中的 n_animal 类,增加方法:
-
配置文件、application 创建 PBIoC 全局变量及 open 事件与4.1一致
-
执行以下代码:
n_animal a a = ioc.get_component('n_animal')
-
执行结果如下:
- 跟4.1相比, n_animal 类存在 set_name 方法,注入 name 属性实际是调用了 set_name 方法,而非直接赋值 name 属性
WX、TEL:18649713925
QQ:768310524