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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值