惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

月光博客
月光博客
J
Java Code Geeks
F
Fortinet All Blogs
Blog — PlanetScale
Blog — PlanetScale
P
Proofpoint News Feed
U
Unit 42
B
Blog
宝玉的分享
宝玉的分享
腾讯CDC
Microsoft Azure Blog
Microsoft Azure Blog
酷 壳 – CoolShell
酷 壳 – CoolShell
Last Week in AI
Last Week in AI
博客园 - Franky
博客园 - 三生石上(FineUI控件)
人人都是产品经理
人人都是产品经理
Martin Fowler
Martin Fowler
博客园_首页
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
云风的 BLOG
云风的 BLOG
L
LangChain Blog
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
Y
Y Combinator Blog
The GitHub Blog
The GitHub Blog
博客园 - 叶小钗

博客园 - lichdr

高德地图热力图的Flutter实现 App消息推送的简单实现 nginx访问日志过滤(多条件) CAS的service参数验证 自定义Token的CAS登录 单元格的计算 表格行列的删除 表格行列的移动 FastReport的一些另类用法 FastReport分组页码 RFID会议签到系统总结(二十二)――系统中的模式 RFID会议签到系统总结(二十一)――服务端的通讯 RFID会议签到系统总结(二十)――数据窗体状态控制 RFID会议签到系统总结(十九)――单数据窗体 RFID会议签到系统总结(十八)――菜单与工具栏的加载 RFID会议签到系统总结(十七)――菜单与工具栏的改造(下) RFID会议签到系统总结(十六)――菜单与工具栏按钮的改造(上) RFID会议签到系统总结(十五)――管控端的窗体组织 RFID会议签到系统总结(十三)――模块概述(下)
RFID会议签到系统总结(十四)――管控端业务模块的加载
lichdr · 2007-07-10 · via 博客园 - lichdr

从上面我们知道现在管控端不再是一个孤零零的应用程序,而是由一些模块组成的,这些模块可能会根据不同情况有各种的组合,这样程序中就不能把模块写死了,而是得动态加载,反射又要派上用场了。

本来想如一些应用一样把业务模块当成是一个个的插件,然后把相应程序集放入类似于Plugins的目录,程序启动时到相应目录去寻找相应程序集这样的机制来加载的。但考虑到业务模块不会很多,引用的程序集也不会很复杂,可以预见以后也不会增加很多,为了简便起见,现把所有的程序集都放在应用程序根目录下。虽然可能会发生版本冲突之类的问题,但对于一个相对简单的应用来讲应该是合适的。

这里的东西其实没什么新意,整个做法跟前面硬件访问是如出一辙的。首先所有可被管控端加载的业务模块要实现如下的接口:

业务模块接口

Context:这里主要就是存放各个业务模块加载时需要的主程序的菜单、工具栏。

LoadCommand:加载这个业务模块所具有的菜单、工具栏,具体做法下面几篇会讲到。

InitializeFinalize:加载模块时除菜单、工具栏外其他一些需要的工作可以在这里完成。比如签到控制模块,通讯端口的开启与关闭。

RegisterMothod:业务模块对于主程序来讲是不可知的,这里可以注册一些方法让主程序调用到它的方法。这是后来加的功能,没有设计好,用了一个Hashtable来存放各个模块的方法委托,好在用得上的地方不是很多。

再来看一下配置:

    <Services>

       <Service Order="1" Name="SignInService" Startup="BCSMService.SignInSrv.SignInRunner,SignInSrv" />

       <Service ...... />

       <Service ...... />

    </Services>

应用上面的配置加载,

模块加载

基本的架子就这样,细节方面以后再讲。