起因:欲开发一报表系统,能动态加载报表程序
该系统基于插件式架构,即除了登录程序和主程序外,其它所有功能均通过后期加载的方式调用,每个组件实现一个特定的报表(或其它功能)
基本思路:
1)登录程序
判断用户身份,并根据参数判断能否进入系统,验证通过后返回所有用户资料(权限、基本信息)
参数:子系统代码
权限信息:可用功能列表
基本信息:个人信息、科室信息
2)主画面
获取上述信息并存于全局对象中
主画面可以实现基本功能,如修改密码、日志查询等
主画面实现插件加载功能,并把用户信息传入组件
主画面在加载插件之前需进行有效性验证,即判断用户权限、判断各个接口方法是否有效
主画面实现插件间通讯功能,允许各个组件通过把数据共享
3)插件
提供有效性验证功能,提供权限要求
能获取主画面传入的用户信息,并存入特定对象中
插件间通讯功能
一、动态加载控件
动态加载,最基本用到的就是反射机制。在System.Reflection的namespace下有一系列的关于获取Assembly信息、类(型)信息的类、接口、结构等:
//加载控件
Assembly assembly = Assembly.LoadFrom(@"C:/C