浅谈C#中一种类插件系统编制的粗略方法(插件间、插件宿主间本身不须求通讯)

小说版权由我李晓晖和新浪共有,若转发请于鲜明处标明出处:http://www.cnblogs.com/naaoveGIS/

1.背景

三年多前还在上研时,用C#+反射机制写过插件系统,后来又用MEF写过插件系统。插件系统自个儿持有易于扩张的优势,所以在实际上项目中使用很频仍。就算在B/S项目中,插件的思索也是流行,比如前端单页面+英特尔编程便足以通晓为一种插件机制,以及后台扩充类型统一打包为一个jar放入主系统jar文件中同步揭橥,也足以领略为插件思想的接纳。

此处大家回来C/S插件系统编制的题材上。由于之前诸多品种编制是将插件编译成dll,然后开展分析。那样做有其好处,即宿主中得以对种种模块解析,已毕插件间、插件和主程序间的通讯。但是在实质上项目中,同样也有其逆风局:

a.每一个插件被编译成了dll,各模块不可以独立运维,必须依托于主程序。

b.修改插件时,由于变化的是dll,无法飞速直观的查阅修改以及调节。

c.每3个插件必须借助于某3个正经。

当大家并不必要插件之间、插件和主程序之间有通讯暴发时,大家是否可以屏弃那种dll插件格局呢?

2.设计思路

此项目背景,即各模块之间无需通讯。并且为了适应各模块能独立运作以及各模块需要独自调试的要求,那里作者平素将各模块设计为独立的系统,即编译后生成exe。在主系统中,通过对安顿文件的解译,生成界面以及绑定相关回调事件。各插件exe以安插规则放入主程序文件夹下即可。

    图片 1                   

3.一发探索

a.C#调用exe,使用Process和 ProcessStartInfo同盟到位。

 图片 2

 b.已毕各模块(exe)的单例格局。

由于是一贯调用exe,不只怕利用古板的单例格局完成。那里可以做一个字典表来存储,近日什么模块已经被调用。

唯独,当循环监听模块是不是退出时,会导致系统卡顿,那里运用多线程来举行模块开启,化解监听模块导致的界面卡顿。

 图片 3

图片 4

 c.主程序退出时,全数模块(exe)退出。

用字典表存储各模块的骨子里进度,主程序退出时,将各过程杀死关闭。

 图片 5

4.类型例子显示

宿主界面:

 图片 6

点击服务发表模块:

 图片 7

 

 

                                                                                         
 —–欢迎转发,但保留版权,请于分明处标明出处:http://www.cnblogs.com/naaoveGIS/

                                                                                  
假使你觉得本文确实协助了您,可以微信扫一扫,进行小额的打赏和鞭策,多谢^_^

                                          图片 8

 

相关文章