.Net 桌面开发之插件开发

.net 插件化开发

之前在编程时发现很多地方调用时都会使用到dll文件,例如arcgis/mapwingis二次开发中,都会使用到相应的dll文件,实际使用的原理是,编译接口时产生dll文件,将该文件放置在主项目的引用中,使用时通过文件查询进行调用
主文件内容

namespace plugin_main_test
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
        string path = Application.StartupPath + "\\plugin.dll";//获取exe文件运行的路径并与dll文件结合构造dll路径
        Assembly asd = Assembly.LoadFile(path);//加载指定路径上的程序集文件的内容。
        Type[] t = asd.GetTypes();//返回在此模块内定义的所有类,该文件包含一个接口实现show
        //取出第一个类,实例化,实例化接口
        plugin_test.inter i = (plugin_test.inter)System.Activator.CreateInstance(asd.GetType(t[0].FullName));
        //通过接口调用
        Text = i.show();
        }
    }
}

插件实现plugin

namespace plugin
{
    public class Class1 : plugin_test.inter
    {
        public string show()
        {
            return "我是插件";
        }
    }
}

插件接口

namespace plugin_test
{

    public interface inter
    {
        string show();
    }
}

由代码可以看到,三套代码都位于不同的项目,在使用时,先将插件接口编译,得到dll(plguin_test)文件,在另外两个项目的引用中添加该dll(plugin_test)文件(引用-》添加引用-》浏览),只要添加了该dll(plguin_test)文件,则另外两个项目中可以使用plugin_test空间下的所有接口,eg(plugin_test.inter),这也是主文件能够使用plugin_test.inter i的原因,同理,建立一个基于插件接口的类,实现该接口(show()),并编译,得到的dll(plugin)文件就实现了该接口,那么在主函数中得到该dll(plugin)文件后,能够加载到该dll(plugin)的类(Class1)i,并通过该类使用其下函数i.show();以上就实现了插件的建立和调用。

个人理解

明白接口原理后,将其用于开发便是com开发模式(插件开发),com不是新奇的技术,但其中依旧有很多值得学习的地方,mapwingis便是使用com开发模式的开源软件,有人将mwg4用c#重写并开源在github上,传送门runingriver/MapWinGIS,相信这是个不错的学习例子。
com开发模式避免了对系统内部功能的修改,在初始化系统后,一切的功能增减都靠插件来实现,在软件初始化过程中,查询对应插件库中是否有符合接口要求的插件,有就加载进来,并按原本规则划定一个显示或者触发插件的位置,点击插件后就是插件的功能使用了,也就能够实现软件的持续系统更新,而不必更新整个软件,在软件破解中也有不少使用dll插件破解的。

参考
C#开发插件式程序简单例程
学习–C# 插件式程序开发

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值