栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > .Net

.Net 桌面开发之插件开发

.Net 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

.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# 插件式程序开发

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/911095.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号