C# winform利用反射和自定义特性加载功能模块(插件式开发)
---恢复内容开始---
由于在实际的工作中, 碰见这样的一个问题:
一个软件, 销售给A客户 他需要所有功能,
但是销售给B客户, 他只需要其中的一部分,
1.如果我们在实际的开发过程中, 没有把一些功能模块区分开来的话, 那么带来的麻烦, 势必是要修改源代码。
2.直到有一天,B客户又说需要某些功能,这个时候, 我们又要修改一次源代码, 更新给客户 , 所以想了想, 如果每个功能块都独立开来, 动态去加载功能, 这样就不用改动源代码, 客户需要哪些功能, 注册那些DLL给他们使用。
?.实现思路
1.每个模块都用单独的程序集(DLL)分开 <反射动态加载>
2.需要指定每个功能模块的命名空间 <特性标记命名空间>
实现代码
1.程序中定义自定义特性, 用于映射程序的的模块信息和功能模块所在的命名空间
在模块的程序集设置好新建的自定义特性 (如下):
1.定义方法读取程序集(DLL)中的第一个特性信息
2.保存AssemblyModuleEntry 的特性信息, 解析特性信息利用反射映射功能模块的主窗体
3.将功能模块的功能都加载到全局缓存对象中, 创建首页的UI控件, 将缓存对象中的模块加载到首页中。
实际效果图:
注意: 反射是会带来性能的损耗, 但是经过合理的优化,还是对性能影响不大, 当个这个设计, 主要看每个人使用的取舍。
核心思想:
1.定义程序可识别的特性
2.保存到功能区的命名空间(主要用于反射获取到指定的功能界面区)
3.利用反射去获取目录下的有特性的程序集,加载指定的功能
---恢复内容结束---
相关推荐
dfphoto 2020-10-16
jameszgw 2020-06-14
zxznsjdsj 2020-05-17
致终将努力的我们 2020-04-16
stonerkuang 2020-03-27
airfling 2019-12-28
Dlanguage 2019-12-26
sunshineboyleng 2019-12-15
Bonrui编程路 2019-12-15
86206132 2019-11-04
TreasureZ 2019-11-04
dollybol 2019-08-07
WhatWhyHow 2015-10-06
lijinjinxuzhou 2015-10-06
守love唯诺 2012-07-06
slivelight 2011-05-26
lijinjinxuzhou 2011-05-26
Handsomefan 2011-06-24
旷野亮光 2012-12-11