网站地图    收藏   

主页 > 后端 > 网站安全 >

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

来源:自学PHP网    时间:2015-04-17 18:33 作者: 阅读:

[导读] 无论是用COM的方式,还是普通DLL,抑或.NET方式来实现插件框架,首先要面临的问题就是如何订立契约。如同我上一篇文章讲到的一样,契约是应用程序和插件之间进行交互的依据和凭证...

无论是用COM的方式,还是普通DLL,抑或vcq9wLTKtc/WsuW8/r/yvNyjrMrXz8jSqsPmwdm1xM7KzOK+zcrHyOe6zrapwaLG9dS8oaPI582sztLJz9K7xqrOxNXCvbK1vbXE0rvR+aOsxvXUvMrH06bTw7PM0PK6zbLlvP7WrrzkvfjQ0L27u6W1xNLAvt26zca+1qSho9Om08OzzNDysdjQ68n5w/fO0tPQyrLDtNH5tcS5psTcv8mxu7LlvP7KudPDo6yyosfSsuW8/rHY0Ou3+7rPyrLDtMz1vP6yxcTcsbvO0sq508Oho7e01q6jrLLlvP6x2NDr0qrWqrXA06bTw7PM0PLM4bmpyrLDtNH5tcS5psTco6zO0rLFxNy9q9fUvLq1xLmmxNzI2sjrtb3TptPDs8zQ8rXEzOXPtdbQoaOxvs+1wdDOxNXC1vfSqr2yyOe6zsq508M8YSBocmVmPQ=="http://www.cnblogs.com/guanjinke/admin/guanjinke.cnblogs.com" title="\">.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;
    }
}

自学PHP网专注网站建设学习,PHP程序学习,平面设计学习,以及操作系统学习

京ICP备14009008号-1@版权所有www.zixuephp.com

网站声明:本站所有视频,教程都由网友上传,站长收集和分享给大家学习使用,如由牵扯版权问题请联系站长邮箱904561283@qq.com

添加评论