写在前面的话
对于大神,Winform这种“古董玩具”,实在没太多“技术性”可言了,然而『好用才是王道』,本文不以技术为卖点,纯属经验之谈,欢迎交流拍砖
朴素版UI
开发初衷
由于本人所在公司不定时需要开发各种OA、数据处理小工具,需求各式各样,杂七杂八,有临时性需求开发的,有长期使用且要不定时更新的,功能一般只有一两个。又因应用不通用,所以不利于统一整合到某单一系统中,如此导致个别使用者电脑里装了玲琅满目的“小程序”。
随着应用数目的增加,维护管理变得越来越棘手[1]。尝试从网上下载过一两个插件框架来用,使用起来虽不是很理想但也凑合[2]。后来某用户提出想要“可实时卸载、加载插件”的需求时,改造那些框架就变得很麻烦,所以干脆自己开发一个。经过几个版本的迭代,运行稳定,代码也变得简洁了。到现在也使用了好一段时间,代码也给重构了一番,所以拿出来和大家分享下。
设计与实现
框架简单明了,主体功能就在插件管理器上。插件是UserControl格式,采用.Net的反射机制进行加载。
如此设计,出于两个目的:
1)插件功能高内聚,与框架低耦合。开发人员根据规范[3]开发并测试好后,直接接入框架即可。也可单独编译成单一程序
2)方便将原来的应用通过简单改造变成插件加载到框架中
插件加载流程
主代码
/// <summary>
/// 加载PlugIns插件目录下的dll
/// </summary>
public static List<UserControlBase> GetPlugIns()
{
List<UserControlBase> lUc = new List<UserControlBase>();
foreach (var dllFile in Directory.GetFiles(PlugInsDir))
{
FileInfo fi = new FileInfo(dllFile);
if (!fi.Name.EndsWith(".dll")) continue;
foreach (var _uc in CreatePluginInstance(fi.FullName))
{