构建插件式的应用程序框架(二)-订立契约

简介: 无论是用COM的方式,还是普通DLL,抑或.NET方式来实现插件框架,首先要面临的问题就是如何订立契约。如同我上一篇文章讲到的一样,契约是应用程序和插件之间进行交互的依据和凭证。应用程序必须声明我有什么样的功能可被插件使用,并且插件必须符合什么条件才能被我使用。
无论是用COM的方式,还是普通DLL,抑或.NET方式来实现插件框架,首先要面临的问题就是如何订立契约。如同我上一篇文章讲到的一样,契约是应用程序和插件之间进行交互的依据和凭证。应用程序必须声明我有什么样的功能可被插件使用,并且插件必须符合什么条件才能被我使用。反之,插件必须要知道应用程序提供什么样的功能,我才能将自己的功能融入到应用程序的体系中。本系列文章主要讲如何使用.NET实现插件式的应用程序框架,所以其它的方式我就不再提了。

如何使用.NET订立契约呢?首先想到的Interface,其次是抽象类,但是在插件模式中我使用接口,因为我们是在满足应用程序的主要目的的基础上来提供附加的插件功能,就这一点来说,接口更灵活,更容易扩展。接下来,如何订立契约的内容呢?这就要根据你的业务需求了,为了讲解的方便,我们定义一个最最基本的插件式应用程序的插件契约。我们做一个假定,我们的应用程序是一个多文档的应用程序,包含一个主菜单栏,一个工具栏,菜单栏可以在程序的上下左右四个方向停靠,另外还有一个状态栏。到后边,如果有必要,我会扩展这个应用程序,让他本身提供更多的可供插件使用的功能。所以就目前而言,我想实现的功能就是让插件为主程序添加工具条,菜单项并实现一些简单的功能。

应用程序向插件提供服务有两种方式,一种是直接再应用程序接口中声明属性或者方法,一种是将应用程序接口声明成一个服务容器。我打算两种方式都用,明确的功能就在接口中直接声明成属性或者方法,另外将应用程序声明成一个服务容器,以方便插入更多的服务功能,提高应用程序的可扩展性。    

下边是一个非常简单的应用程序接口定义,对于我们的假定已经足够了。
复制   保存
using System;
using System.Collections.Generic;
using System.Text;
using System.ComponentModel.Design;
using System.Windows.Forms;
namespace PluginFramework
{
public interface IApplication : IServiceContainer
{
ToolStripPanel LeftToolPanel { get; }
ToolStripPanel RightToolPanel { get; }
ToolStripPanel TopToolPanel { get; }
ToolStripPanel BottomToolPanel { get; }
MenuStrip MainMenuStrip { get; }
StatusStrip StatusBar { get; }
}
}

插件的接口定义:
复制   保存
using System;
using System.Collections.Generic;
using System.Text;
namespace PluginFramework
{
public interface IPlugin
{
IApplication Application { get; set; }
String Name { get; set; }
String Description { get; set; }
void Load();
void UnLoad();
event EventHandler<EventArgs> Loading;
}
}
目录
相关文章
|
编解码 安全
租个5000人玩的游戏服务器一年多少钱?好用的游戏服务器推荐
​游戏服务器最重要的就是安全稳定,特别是需要防攻击,所以租用带防御的高防服务器是很有必要的。那么可以供5000人玩的游戏服务器一年大概多少钱呢?
4870 0
租个5000人玩的游戏服务器一年多少钱?好用的游戏服务器推荐
|
Linux 虚拟化 Docker
|
JavaScript 前端开发 IDE
QCAD v3.23.0.2源码编译,使用VS2017+Qt5.12.5环境
QCAD v3.23.0.2源码编译,使用VS2017+Qt5.12.5环境
1328 0
|
11月前
|
Kubernetes 算法 调度
阿里云 ACK FinOps成本优化最佳实践
本文源自2024云栖大会梁成昊演讲,讨论了成本优化策略的选择与实施。文章首先介绍了成本优化的基本思路,包括优化购买方式、调整资源配置等基础策略,以及使用弹性、资源混部等高级策略。接着,文章详细探讨了集群优化和应用优化的具体方法,如使用抢占式实例降低成本、通过资源画像识别并优化资源配置,以及利用智能应用弹性策略提高资源利用效率。
|
算法 安全 量子技术
量子计算与金融风险管理:提升市场预测能力
【10月更文挑战第8天】量子计算作为一种前沿技术,正在逐步改变金融风险管理的格局。通过利用其独特的计算能力和优化算法,量子计算可以显著提高市场预测的准确性和及时性,为金融机构提供更精准的风险管理工具。尽管目前仍面临一些挑战和限制,但随着技术的不断进步和完善,相信量子计算将在未来的金融风险管理领域发挥更加重要的作用。
|
前端开发 JavaScript 数据可视化
深入理解MVVM架构模式
深入理解MVVM架构模式
2163 0
大学物理实验-仿真实验-示波器的原理
大学物理实验-仿真实验-示波器的原理
705 0
大学物理实验-仿真实验-示波器的原理
|
机器学习/深度学习 人工智能 算法
图解机器学习 | 回归树模型详解
用于回归任务的决策树称作回归树,属性选择与生长方式与分类决策树不同。本文讲解决策树回归算法的核心思想、启发式切分、最优属性选择、过拟合、正则化、以及缺失值处理等关键知识点。
1237 1
图解机器学习 | 回归树模型详解