【说明】

很多时候大家认为客户端插件一般是窗体。其实不然,很多功能都可以看成是插件,比如一个单据的审批功能,一个单据上面,单价的获取功能,都可以看成是插件,然后后期通过配置,可以灵活进行切换。MyBean支持这种插件,支持这种纯逻辑的插件。剩下的是需要自己去制定执行逻辑的协议,这个DEMO就是展示如果进行逻辑插件的编写。

【DEMO设计】

该DEMO在调用DLL的一个插件完成两个简单数字的简单合计,然后可以由其他插件调用日志插件输出功能。

先制定接口协议(uILogic.pas):

type
/// <summary>
/// 合计插件接口
/// </summary>
ISumExp = interface(IInterface)
['{D02C3764-1231-46EC-8C74-95DFBF2A1ED5}']
function sum(i:Integer; j:Integer):Integer; stdcall;
end; /// <summary>
/// 日志插件接口
/// </summary>
IMyBeanLogger = interface(IInterface)
['{B872909D-99FF-47B9-A3F9-8CB9C26A8FD5}']
procedure LogMessage(s: PAnsiChar); stdcall;
end;

2.注册日志插件, 由EXE提供实现,在EXE中注册日志插件(uMyBeanLoggerImpl.pas)。

initialization
///注册日志插件
beanFactory.RegisterBean('mybeanLogger', TMyBeanLoggerImpl);

3.逻辑插件的实现(ISumExp接口的实现)

function TSumExpImpl.sum(i, j: Integer): Integer;
begin
Result := i + j; (TMyBeanFactoryTools.getBean('mybeanLogger') as IMyBeanLogger).LogMessage('dll插件调用mybeanLogger插件,输出一些信息');
end;

4.注册逻辑插件

library logicBean;

uses
SysUtils,
mybean.core.beanFactoryForNoVcl,
Classes,
uSumExpImpl in 'uSumExpImpl.pas',
uILogic in '..\common\uILogic.pas'; {$R *.res} begin
beanFactory.RegisterBean('sumExp', TSumExpImpl);
end.

5.编译出来的DLL和EXE放一起就可以运行了

该DEMO只是抛砖,想想自己的系统中可以把哪些功能做成逻辑插件……

最新文章

  1. eclipse svn提交报错
  2. CSS基础(三):选择器
  3. WCF服务部署到IIS7.5
  4. Redis 集合操作
  5. inand和emmc区别
  6. Java [Leetcode 204]Count Primes
  7. libpcap使用
  8. node.js后台快速搭建在阿里云(一)(express篇)
  9. Spark核心技术原理透视一(Spark运行原理)
  10. 迭代和JDB(课下作业,选做)
  11. 其它综合-有关service、systemctl、chkconfig、init
  12. halcon 图片加载和设置XY轴滑动块的先后顺序
  13. xlistview长按
  14. 基于Thinkphp5.0 小程序登录插件应用
  15. JPA环境配置
  16. HRMS(人力资源管理系统)-从单机应用到SaaS应用-架构分析(功能性、非功能性、关键约束)-下篇
  17. ethereum/EIPs-191 Signed Data Standard
  18. 2018面向对象程序设计(Java) 第2周学习指导及要求
  19. LeetCode144:Binary Tree Preorder Traversal
  20. World Cup(思维+模拟)

热门文章

  1. swift3 生成UUID
  2. Megcup2017 Dogfood
  3. maven 下载 源码和javadoc命令(转)
  4. (org.jbehave.core.failures.BeforeOrAfterFailed: webdriver selenium错误解决。
  5. Zabbix 常见问题处理整理
  6. Swift 扩展
  7. easyui combobox 动态加载的两种方法
  8. docker 和 vagrant 作为程序发布 和 开发的独立而统一的运行环境
  9. Python 文件 fileno() 方法
  10. freeswitch订阅会议相关通知