iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >C#插件构架实例分析
  • 167
分享到

C#插件构架实例分析

2023-06-17 23:06:02 167人浏览 独家记忆
摘要

这篇文章主要介绍“C#插件构架实例分析”,在日常操作中,相信很多人在C#插件构架实例分析问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”C#插件构架实例分析”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!C#

这篇文章主要介绍“C#插件构架实例分析”,在日常操作中,相信很多人在C#插件构架实例分析问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”C#插件构架实例分析”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

C# 是面向对象的程序设计语言。它提供了 interface 关键字来直接定义接口。同时,System.Reflection 命名空间也提供了访问外部程序集的一系列相关对象。这就为我们在 C# 中实现插件构架打下了坚实的基础。

C#插件构架设计过程

好了,现在我们准备把所有的核心代码都放在 CSPluginKernel 命名空间中。用VSIDE建立一个C#类库工程。在命名空间 CSPluginKernel 中开始我们的代码。

C#插件构架——接口设计

我们的程序编辑器会向插件开放正在编辑的文档对象。程序启动后,就枚举每一个插件并把它连接到主程序,同时传递主程序对象的接口。插件可以通过这个接口来请求主程序对象或访问主程序功能 。

根据上面的需求,我们首先需要一个主程序接口:

public interface IApplicationObject {    void Alert( string msg ); // 产生一条信息    void ShowInStatusBar( string msg ); // 将指定的信息显示在状态栏    IDocumentObject QueryCurrentDocument(); // 获取当前使用的文档对象    IDocumentObject[] QueryDocuments(); // 获取所有的文档对象    // 设置事件处理器    void SetDelegate( Delegates whichOne , EventHandler targer );   }    // 目前只需要这一个事件    public enum Delegates {    Delegate_ActiveDocumentChanged ,   }

然后是 IDocumentObject 接口。插件通过这个接口访问编辑器对象。

///   /// 编辑器对象必须实现这个接口   ///    public interface IDocumentObject {    // 这些属性是 RichTextBox 控件的相应的属性映射    string SelectionText { get ; set ; }    Color SelectionColor { get ; set ; }     Font SelectionFont { get ; set ; }    int SelectionStart { get ; set ; }    int SelectionLength { get ; set ; }    string SelectionRTF { get ; set ; }    bool HasChanges { get ; }    void Select( int start , int length );    void AppendText( string str );    void SaveFile( string fileName );    void SaveFile();    void OpenFile( string fileName );    void CloseFile();   }

这个接口不需要过多解释。这里我只实现了RichTextBox控件少数的几个方法,其他可能用得到的,读者自行添加即可。

再然后,根据插件在其生命周期里的行为,设计插件的接口。

///   /// 本程序的插件必须实现这个接口   ///    public interface IPlugin {    ConnectionResult Connect( IApplicationObject app );    void OnDestory();    void OnLoad();    void Run();   }    ///   /// 表示插件与主程序连接的结果   ///   public enum ConnectionResult {    Connection_Success ,    Connection_Failed   }

主程序会首先调用 Connect() 方法,并传递 IApplicationObject 给插件。插件在这个过程中做一些初始化工作。然后,插件的 OnLoad() 方法被调用。在这之后,当主程序接收到调用插件的信号时(键盘、鼠标响应)就会调用插件的 Run() 方法来启动这个插件。程序结束时,调用其 OnDestory() 方法。这样,插件的生命才宣告结束。

C#插件构架——加载插件

现在就得用到 System.Refelction 命名空间了。程序在启动时会搜索 plugins 目录下的每一个文件。对于每一个文件,如果它是一个插件,就用 Assembly 对象加载它。然后枚举程序集中的每一个对象。判断一个程序集是否为我们的插件的方法是判断它是否直接或间接实现自 IPlugin。用下面的函数,传递从程序集枚举的对象的System.Type。

private bool IsValidPlugin( Type t ) {    bool ret = false ;    Type[] interfaces = t.GetInterfaces();    foreach ( Type theInterface in interfaces ) {   if ( theInterface.FullName == "CSPluginKernel.IPlugin" ) {    ret = true ;    break ;   }    }    return ret;   }

若条件都满足,IsValidPlugin() 就会返回 true 。接着程序就会创建这个对象并把它存于一个 ArrayList 中。

plugins.Add( pluginAssembly.CreateInstance( plugingType.FullName ) );

到此,关于“C#插件构架实例分析”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注编程网网站,小编会继续努力为大家带来更多实用的文章!

--结束END--

本文标题: C#插件构架实例分析

本文链接: https://www.lsjlt.com/news/294598.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • C#插件构架实例分析
    这篇文章主要介绍“C#插件构架实例分析”,在日常操作中,相信很多人在C#插件构架实例分析问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”C#插件构架实例分析”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!C#...
    99+
    2023-06-17
  • C#MSN插件开发实例分析
    这篇文章主要介绍“C#MSN插件开发实例分析”,在日常操作中,相信很多人在C#MSN插件开发实例分析问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”C#MSN插件开发实例分析”的疑惑有所帮助!接下来,请跟着小编...
    99+
    2023-06-17
  • C#如何实现插件构架
    这篇文章主要讲解了“C#如何实现插件构架”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C#如何实现插件构架”吧!假设你设计的程序已经部署到用户的计算机上,并且能够正常运行了。但是有一天,用户...
    99+
    2023-06-17
  • C++的构造和析构实例分析
    本篇内容主要讲解“C++的构造和析构实例分析”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C++的构造和析构实例分析”吧!1. 构造函数 1.1 构造函数长什么样子(1) 函数名和类名...
    99+
    2023-06-29
  • linux上numa架构实例分析
    今天小编给大家分享一下linux上numa架构实例分析的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。以下案例基于 Ubunt...
    99+
    2023-06-29
  • MySQL架构组件的示例分析
    这篇文章将为大家详细讲解有关MySQL架构组件的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。总体架构一. 连接器  连接器主要负责跟客户端建立连接、权限验证和管...
    99+
    2024-04-02
  • JavaScript插件化框架MinimaJS的示例分析
    这篇文章将为大家详细讲解有关JavaScript插件化框架MinimaJS的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。JavaScript编写的插件化框架——...
    99+
    2024-04-02
  • Angular2架构的示例分析
    这篇文章给大家分享的是有关Angular2架构的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。核心模块一个完整的Angular应用主要由六个重要部分组成:组件、模板、指令...
    99+
    2024-04-02
  • Kubernetes架构的示例分析
    这篇文章主要介绍Kubernetes架构的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!首先,为什么要用Kubernetes 使用一个工具先要梳理下使用这个工具的目标,我们不是为了工具而用工具。Kuberne...
    99+
    2023-06-19
  • 分布式微服务云架构实例分析
    今天就跟大家聊聊有关分布式微服务云架构实例分析,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。源码结构JEESZ驱动式项目构建内置高效可靠的代码生成器支持多种数据模型,根据数据库表生成...
    99+
    2023-06-05
  • C++对象的构造实例分析
    这篇“C++对象的构造实例分析”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“C++对象的构造实例分析”文章吧。一、对象的构造...
    99+
    2023-06-30
  • C语言结构体实例分析
    这篇文章主要介绍“C语言结构体实例分析”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“C语言结构体实例分析”文章能帮助大家解决问题。1. 动态内存管理C语言代码----->编译----->...
    99+
    2023-06-29
  • Android开发组件化架构设计原理实例分析
    今天小编给大家分享一下Android开发组件化架构设计原理实例分析的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。为什么需要组...
    99+
    2023-07-02
  • C#结构体构造函数的实例分析
    这期内容当中小编将会给大家带来有关C#结构体构造函数的实例分析,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。C#结构体构造函数的应用是如何的呢?C#结构体构造函数的实例1、  &nbs...
    99+
    2023-06-18
  • 标准Web系统的架构分层实例分析
    本篇内容主要讲解“标准Web系统的架构分层实例分析”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“标准Web系统的架构分层实例分析”吧! 墙裂分享,标准Web...
    99+
    2024-04-02
  • Mybatis分页插件的示例分析
    这篇文章主要介绍Mybatis分页插件的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!Mybatis分页插件的实例详解1.前言:我们知道,在MySQL中,分页的sql是使用l...
    99+
    2024-04-02
  • golang gorm开发架构及写插件示例
    目录1. 开发1.1. 架构1.2. 写插件1.2.1. 注册新的callback1.2.2. 删除现有的callback1.2.3. 替换现有的callback1.2.4. 注册c...
    99+
    2024-04-02
  • 服务器的高并发架构实例分析
    本篇内容主要讲解“服务器的高并发架构实例分析”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“服务器的高并发架构实例分析”吧!服务器架构业务从发展的初期到逐渐成熟,服务器架构也是从相对单一到集群,再...
    99+
    2023-06-05
  • web前端与后端分离的架构实例分析
    本篇内容主要讲解“web前端与后端分离的架构实例分析”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“web前端与后端分离的架构实例分析”吧!一、关于前端的 dat...
    99+
    2024-04-02
  • OCR插件Ocrad.js的示例分析
    这篇文章主要介绍了OCR插件Ocrad.js的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。Ocrad.js 相当于是 Ocrad ...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作