【说明】

很多时候大家认为客户端插件一般是窗体。其实不然,很多功能都可以看成是插件,比如一个单据的审批功能,一个单据上面,单价的获取功能,都可以看成是插件,然后后期通过配置,可以灵活进行切换。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只是抛砖,想想自己的系统中可以把哪些功能做成逻辑插件……

【MyBean-开源框架】进行简单的逻辑插件(演示在控制台中应用)的更多相关文章

  1. Farseer.net轻量级开源框架 入门篇:逻辑层的选择

    导航 目   录:Farseer.net轻量级开源框架 目录 上一篇:Farseer.net轻量级开源框架 入门篇: 入门篇:增.删.改.查操作演示 下一篇:Farseer.net轻量级开源框架 入门 ...

  2. Android中Universal Image Loader开源框架的简单使用

    UIL (Universal Image Loader)aims to provide a powerful, flexible and highly customizable instrument ...

  3. webSocket开源框架:SocketRocket 简单的使用

    需要用到webSocket,所以搜集了一下使用方法, git下载地址:square/SocketRocket gitHUB 上没有看懂,就要 cocoaPod 导入了 socketRocket 导入这 ...

  4. chrome插件演示,经js转让chrome api清除浏览器缓存

    一个简单的chrome插件演示,主页脚本.内容脚本.背景和脚本之间的通信api呼叫.在此之上可以延长通话等chrome api. 下载链接:http://download.csdn.net/detai ...

  5. Farseer.net轻量级开源框架 入门篇:分类逻辑层

    导航 目   录:Farseer.net轻量级开源框架 目录 上一篇:Farseer.net轻量级开源框架 入门篇: 缓存逻辑层 下一篇:Farseer.net轻量级开源框架 入门篇: 添加数据详解 ...

  6. 开源框架】Android之史上最全最简单最有用的第三方开源库收集整理,有助于快速开发

    [原][开源框架]Android之史上最全最简单最有用的第三方开源库收集整理,有助于快速开发,欢迎各位... 时间 2015-01-05 10:08:18 我是程序猿,我为自己代言 原文  http: ...

  7. Android中android-async-http开源网络框架的简单使用

    android-async-http开源网络框架是专门针对Android在Apache的基础上构建的异步且基于回调的http client.所有的请求全在UI线程之外发生,而callback发生在创建 ...

  8. 开源一个跨平台运行的服务插件 - TaskCore.MainForm

    本次将要很大家分享的是一个跨平台运行的服务插件 - TaskCore.MainForm,此框架是使用.netcore来写的,现在netcore已经支持很多系统平台运行了,所以将以前的Task.Main ...

  9. Pyhton开源框架(加强版)

    info:Djangourl:https://www.oschina.net/p/djangodetail: Django 是 Python 编程语言驱动的一个开源模型-视图-控制器(MVC)风格的 ...

随机推荐

  1. 数组问题常用的O(N)算法:单调队列

    求max(a)<min(b)的区间个数 给定两个长度都为N的整型数组a[N]和b[N],求满足如下条件的闭区间个数:在区间[l,r]上,a中的任意元素都比b中的任意元素小. 这个问题是O(N)复 ...

  2. git学习笔记(二)—— 创建版本库&&版本管理

    一.创建版本库 创建一个版本库非常简单,首先,选择一个合适的地方,创建一个空目录: mkdir gitHub_CXWcd gitHub_CXW git init Initialized empty G ...

  3. android sdk 编译--如何将源代码加入android.jar,以及make原理

    首先是这个问题如何修改. 在/frameworks/base/Android.mk中,找到如下行:packages_to_document :=在该变量的赋值语句最后添加xxxxx (这里是你的包的名 ...

  4. 【C#】反编译C#应用程序

    下面的使用的使用是笔者使用的一个简单的程序,就是弹出一个消息框. 这里通过 ildasm 反编译 应用程序得到 il 文件,然后对 il 文件进行修改,修改内容后,再通过ilasm编译为应用程序.il ...

  5. .NET压缩图片保存 .NET CORE WebApi Post跨域提交 C# Debug和release判断用法 tofixed方法 四舍五入 (function($){})(jQuery); 使用VUE+iView+.Net Core上传图片

    .NET压缩图片保存   需求: 需要将用户后买的图片批量下载打包压缩,并且分不同的文件夹(因:购买了多个用户的图片情况) 文章中用到了一个第三方的类库,Nuget下载 SharpZipLib 目前用 ...

  6. EasyUI 中GridView 满足某条件 改变行的背景色

    <table id='grid' class='easyui-datagrid' style='width:1500px;height:450px' url='Ajax-index.php?mo ...

  7. “C++的数组不支持多态”?

    先是在微博上看到了个微博和云风的评论,然后我回了“楼主对C的内存管理不了解”. 后来引发了很多人的讨论,大量的人又借机来黑C++,比如: //@Baidu-ThursdayWang:这不就c++弱爆了 ...

  8. 如何学好C、C++语言

    如何学好C语言 有人在酷壳的留言版上询问下面的问题 keep_walker : 今天晚上我看到这篇文章. http://programmers.stackexchange.com/questions/ ...

  9. iOS runtime执行时具体解释

    什么是runtime? runtime直译就是执行时间,run(跑,执行) time(时间),网上大家都叫它执行时,它是一套比較底层的纯C语言API,属于一个C语言库,包括了非常多底层的C语言API, ...

  10. 验证码识别 图像降噪 Python (一)

    原始图片: 降噪后的图片 实现代码: # coding:utf-8 import sys, os from PIL import Image, ImageDraw # 二值数组 t2val = {} ...