RFID会议签到系统总结(十四)――管控端业务模块的加载
从上面我们知道现在管控端不再是一个孤零零的应用程序,而是由一些模块组成的,这些模块可能会根据不同情况有各种的组合,这样程序中就不能把模块写死了,而是得动态加载,反射又要派上用场了。
本来想如一些应用一样把业务模块当成是一个个的插件,然后把相应程序集放入类似于Plugins的目录,程序启动时到相应目录去寻找相应程序集这样的机制来加载的。但考虑到业务模块不会很多,引用的程序集也不会很复杂,可以预见以后也不会增加很多,为了简便起见,现把所有的程序集都放在应用程序根目录下。虽然可能会发生版本冲突之类的问题,但对于一个相对简单的应用来讲应该是合适的。
这里的东西其实没什么新意,整个做法跟前面硬件访问是如出一辙的。首先所有可被管控端加载的业务模块要实现如下的接口:
Context:这里主要就是存放各个业务模块加载时需要的主程序的菜单、工具栏。
LoadCommand:加载这个业务模块所具有的菜单、工具栏,具体做法下面几篇会讲到。
Initialize与Finalize:加载模块时除菜单、工具栏外其他一些需要的工作可以在这里完成。比如签到控制模块,通讯端口的开启与关闭。
RegisterMothod:业务模块对于主程序来讲是不可知的,这里可以注册一些方法让主程序调用到它的方法。这是后来加的功能,没有设计好,用了一个Hashtable来存放各个模块的方法委托,好在用得上的地方不是很多。
再来看一下配置:
<Services>
<Service Order="1" Name="SignInService" Startup="BCSMService.SignInSrv.SignInRunner,SignInSrv" />
<Service ...... />
<Service ...... />
</Services>
应用上面的配置加载,