Delphi 的插件框架 WisdomPluginFramework
WisdomPluginFramework是融合OSGI微内核理念 + Eclipse的扩展点概念而精心设计的轻量级插件框架,
由Delphi实现,但可以使用于Delphi、BCB、VC++中,提供非常强大灵活的插件调度能力,让你充分享受插件式编程的乐趣。
http://www.cnblogs.com/IceAir/p/3855559.html
框架都特性
1、她是微内核的设计
什么是微内核?就是核心实现小如原子,其它一切皆是插件,通过插件的相互构织构建出大千世界。
与此相对应的,那些构建了基本框架,给你一堆既定接口让你完善细处的叫巨内核设计,我讨厌学习一堆接口,因此坚决支持微内核设计,
微内核下整个实现的核心代码可能就2000行内,对高手来说三刀两斧就阅读完了,代码虽小,却是灵活强大。
用巨内核的叫水泥工,而在微内核外,那是你自由奔放的灵感创造,你就是世界的构筑者。
2、面向接口,任意角落调用
插件核心、插件服务全部以纯接口方式暴露,任何插件在任何时候可以获取任何其它插件所声明提供的接口服务,不用关心怎么处理和
这些插件的关系,人人为我,我为人人嘛。
3、扩展点概念让插件无限扩展
每个插件实现自己梦想的同时,能力大的还可以留给别人实现梦想的空间,这个空间就是扩展点,每个插件都可以向别的插件声明扩展空间,
任何其它插件都可以来实现这个扩展点,就如同一个插头又预留有插头口一样,插头和插头间可以互插而互连形成树状获得无限扩展能力,但
对于任何一个插件角度看去,任何其它插件又是平面化的,就像人与人一样,你可以与任何一个人你见到的人打交道,而不需要一定有介绍人。
扩展点概念是Eclipse的设计精髓之一,通过扩展点,能让你的界面灵活得就像Eclipse一样。
4、她只使用纯DLL做插件(当然也可用BPL,我认为那只是打个钩的事情)
Delphi下的BPL确实很好,但你一定咬牙切齿要维护一个支持那时的BPL的编译环境和控件,我也是这样想的,因此坚决支持纯正DLL。
5、她能支持除Delphi外的其它编译器生成的DLL
像VC++有这么多优秀的库,不用甚是可惜,所以,支持它编译的DLL!如果万一还有支持不住的怎么办?比如像易语言?比如在Linux下跑?
好得我也考虑到了,刚才我有把微内核比作原子,大家都知道,原子还能更细分到电子,所以,微内核里的东西还能细分出来更换呢!
内核里我就有一个DLL加载器,你只要为特殊的DLL重定义一个加载器,就能跑起来了,看到这里,是不是有点跃跃欲试了哈。
6、她不需要重启就能动态更新/更换新版本的DLL插件
这功能在不能停的服务端那是相当有用对不对,听起来也很高大上对不对,其实实现很简单,你只需遵守一条规则就行,那就是她叫你释放
某个接口时你要立马无条件接受并立刻按她说的做,当然,一瞬间后她会立刻把你需要的服务接口送还给你。
7、插件懒加载,务求最少资源占用
插件框架提供总是、按需、自动管理三种方式载入插件,不必要还没有用起的插件就留着在磁盘上吧,保持她苗条秀丽的身材跑得快效率高。
在自动这种方式下,如果插件在一段时间发现没人用,就把插件卸出内存,哇,这功能好啊!很遗憾,我没有做,不是懒,因为我细想后,觉得
这件事情可划入由外部插件来插手的领域,不是原子性的范畴,以保证微内核是真的微哈。
8、手动式还是配置全由你
提供全套API让你可在程序中手动获取、管理、卸载插件DLL,当然也提供xml配置的方式自动管理插件,要不,小小程序也要配一个xml就说不过去了。
9、可能可以在Linux下跑
我只用到了D7的语言特性,因此,小改一点应可以用Lazarus跑起来,但我是Linux菜鸟,没有发言权,所以只能说可能,求高手上斧。
然后再说下怎么使用,还是很简单地:
1、解压到目录A后,在Delphi环境中,Tools-->Environment Options,打开Library标签,
在Browsing Path和Library Path中包含源码中的Core目录
2、新建项目,在Project-->View Source下的uses中,首先第一个打上”WisdomFramework“,在需要跑起的地方加一句TWisdomFramework.Run就可以了
3、在需要调用框架接口的地方,uses一下接口说明文件即可,其中”WisdomCoreInterfaceForD“是给Delphi用的,给C++用的头文件在Demo的Cplus里哦
这里有一条规则:如果搞有DLL中的界面元素显示到Host主窗口,那么在主窗口的OnClose或Destroy中,一定要调用一下TWisdomFramework.Stop
具体特性参看Demo演示。
最后,说一下这个框架的设计理念,这只需要一张图就足够了,如下:

http://bbs.2ccc.com/topic.asp?topicid=458999
https://code.csdn.net/IceAir/wisdompluginframework
Delphi 的插件框架 WisdomPluginFramework的更多相关文章
- 终于可以发布Delphi下收点OSGI精髓皮毛而设计的插件框架WisdomPluginFramework
这是一个Delphi实现的插件框架,我耗费了相当相当相当多的精力来设计她,虽然仅闪着点我微薄智慧的光芒,但我还是决定用Wisdom来命名她,也因它是我绝无仅有的,在完成1年多后回头来看仍能相当满意的作 ...
- delphi 的插件机制与自动更新
delphi 的插件机制与自动更新 : 1.https://download.csdn.net/download/cxp_2008/2226978 参考 2.https://download.cs ...
- 分享在Linux下使用OSGi.NET插件框架快速实现一个分布式服务集群的方法
在这篇文章我分享了如何使用分层与模块化的方法来设计一个分布式服务集群.这个分布式服务集群是基于DynamicProxy.WCF和OSGi.NET插件框架实现的.我将从设计思路.目标和实现三方面来描述. ...
- (2)从实际项目谈起,基于MEF的插件框架之总体设计
文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/. 1.MEF框架简介 MEF的全称是Managed Extensibil ...
- [转]仿World Wind构造自己的C#版插件框架——WW插件机制精简改造
很久没自己写东西啦,早该好好总结一下啦!一个大师说过“一个问题不应该被解决两次!”,除了一个好脑筋,再就是要坚持总结. 最近需要搞个系统的插件式框架,我参照World Wind的插件方式构建了个插件框 ...
- 基于Proxy思想的Android插件框架
意义 研究插件框架的意义在于下面几点: 减小安装包的体积,通过网络选择性地进行插件下发 模块化升级.减小网络流量 静默升级,用户无感知情况下进行升级 解决低版本号机型方法数超限导致无法安装的问题 代码 ...
- [转]C/C++:构建你自己的插件框架
本文译自Gigi Sayfan在DDJ上的专栏文章.Gigi Sayfan是北加州的一个程序员,email:gigi@gmail.com. 本文是一系列讨论架构.开发和部署C/C++跨平台插件框架的文 ...
- 基于MEF的插件框架之总体设计
基于MEF的插件框架之总体设计 1.MEF框架简介 MEF的全称是Managed Extensibility Framework(MEF),其是.net4.0的组成部分,在3.5上也可以使用.熟悉ja ...
- delphi 的 ORM 框架
delphi 的 ORM 框架,收集如下: 1.EntityDac https://www.devart.com/entitydac/download.html 2.mORMot The ...
随机推荐
- python脚本-实现自动按规则创建指定大小和指定个数的文件案例
# -*- coding: cp936 -*-#---------------------------------------------------------------------------- ...
- windows下安装多个mysql
1.正常安装mysql5.1.33 安装服务名为mysql3306 安装目录d:\mysql5.1\3306 安装完成后,关闭服务 ① 复制安装文件 将默认安装目录C:\Documents and S ...
- 为什么需要学UML建模
今天在看<设计模式>的时候,看到了许多的UML模型图,案例中作者用极少的代码却能讲清楚讲好设计模式的背景和思想,抽象成一张张的UML图就能很好的review和复盘,这对于在工作中习惯用代码 ...
- jquery.query.js 插件(示例及简单应用) —— html之间传值
帮助文档 var url = location.search; > "?action=view§ion=info&id=123&debug&te ...
- Characters_of_the_Three_Kingdoms - 三国人物结构化数据
Characters_of_the_Three_Kingdoms - 三国人物结构化数据 三国人物结构化数据 为什么会有这个项目 需求1:摆脱网上那些长篇累牍的文章: 需求2:只是想简单查看下人物姓甚 ...
- Java Hibernate和.Net EntityFramework 如何在提交事务之前 就拿到需要新增实体的Id
在Hibernate中很容易做到这一点,因为hibernate在事务commit之前 还有一个save方法,这个save方法就可以持久化并且拿到Id. 但是EF并不可以呀,EF是将对象标记为新增状态 ...
- CentOS7.6使用flatpak安装软件
1.安装flatpak(CentOS 7已默认安装Flatpak) yum -y install flatpak 2.添加Flathub仓库 flatpak remote-add --if-not-e ...
- spring_150909_hibernate_id_table
1.新建java工程:spring_150909_hibernate_id_table,如下图所示: 2.建DogPet实体类: package com.spring.model; import ja ...
- ArrayList to Array Conversion in Java
ArrayList to Array Conversion in Java Following methods can be used for converting ArrayList to Arra ...
- NOIP2011 D1 T2选择客栈
上题目: 题目描述 丽江河边有n 家很有特色的客栈,客栈按照其位置顺序从 1 到n 编号.每家客栈都按照某一种色调进行装饰(总共 k 种,用整数 0 ~ k-1 表示),且每家客栈都设有一家咖啡店,每 ...