[热拔插] 轻量级Winform插件式框架

本文分享了一个轻量级的Winform插件式框架的开发经验,旨在解决小型OA工具和数据处理应用的管理和维护问题。框架利用.NET反射机制加载UserControl格式的插件,实现高内聚、低耦合的设计。通过特定方式实现插件的热拔插功能,允许用户在程序运行时实时加载或卸载插件,提升了用户体验。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

写在前面的话

对于大神,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))
        {
        
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值