随笔 - 44  文章 - 0 评论 - 302 trackbacks - 88
<2007年2月>
28293031123
45678910
11121314151617
18192021222324
25262728123
45678910

本博客上的所有文章如非特别说明均为原创,如果要转载请注明文章出处。

与我联系

搜索

 

常用链接

留言簿(19)

我参加的小组

我参与的团队

随笔分类(40)

随笔档案(44)

文章分类

联系我

友情链接

积分与排名

  • 积分 - 170639
  • 排名 - 206

最新评论

阅读排行榜

评论排行榜

无论是用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;
    }

}

   

时间又不早了,今天就写到这里,明天接着写。

posted on 2007-02-14 23:07 纶巾客 阅读(8766) 评论(18)  编辑 收藏 所属分类: .Net Framework

FeedBack:
#1楼  2007-02-15 08:36 Robber      
昨晚才看到一,早上就出来二了~~效率快呀~~~
有一个小意见,能不能提供完整的源代码下呢??
主要的地方加上一些注释.....!!!
  回复  引用  查看    
#2楼 [楼主] 2007-02-15 08:59 纶巾客      
现在代码还没有成型,稍后我会程序放上来的。
  回复  引用  查看    
期待能早日完成,我也认真学习一下!

http://www.massany.com
  回复  引用  查看    
认真学习中,有完整的代码就更好了!!!加油!
  回复  引用    
#5楼  2007-02-15 09:58 路过 [未注册用户]
SharpDevelop 也是采用全插件架购的,开发所有源代码。楼主可否介绍下这个案例http://www.icsharpcode.net
  回复  引用    
#6楼  2007-02-15 11:50 U2U      
这里推荐一篇我以前看过,完整的,个人感觉很好的文章,(关于插件架构)

http://wayfarer.cnblogs.com/articles/28537.html
  回复  引用  查看    
#7楼  2007-02-15 14:11 极地银狐.NET      
楼主太会掉我们胃口啦.哈哈.
  回复  引用  查看    
#8楼 [楼主] 2007-02-15 14:24 纶巾客      
工作太忙,回家才有机会写,请大家见谅,我会加油的。
  回复  引用  查看    
#9楼  2007-02-15 15:37 U2U      
这里推荐一篇我以前看过,完整的,个人感觉很好的文章,(关于插件架构)

http://wayfarer.cnblogs.com/articles/28537.html 回复 更多评论


大家不想被掉胃口的话,建议去看上面的文章,也是关于插件架构,已经是完整的了。其实我觉得这些已经有的文章就没必要人人读写,浪费时间。搜索一下就能找到了,不过我这里不是打击作者。
  回复  引用  查看    
#10楼 [楼主] 2007-02-15 18:07 纶巾客      
@U2U
我并非是要吊大家的胃口,只是每天的时间有限,只能写一段。blog本身就是一个表达自己想法的空间,并不是为了写作而写作,只是对自己收获的一个总结,所以当我写的时候我不必苛求自己写的东西一定是别人写过的。另外,就算是同一个主题,每一个的看法也不尽相同,写出来的东西也不一定一样,阅读的人可以从中获得不同的东西。
  回复  引用  查看    
#11楼  2007-02-16 20:20 COOL [未注册用户]
真想学学!
  回复  引用    
#12楼  2007-02-20 20:47 JesseZhao      
Good article
  回复  引用  查看    
#13楼  2007-02-21 10:19 ghjghj [未注册用户]
fhfhfhgfhgfhgh
  回复  引用    
#14楼  2007-02-22 16:34 tsang [未注册用户]
Good and thanks!
  回复  引用    
#15楼  2007-02-25 14:35 goodq [未注册用户]
呵呵,“三”怎么还没出啊
  回复  引用    
#16楼  2007-04-24 15:22 wucz [未注册用户]
向楼主致敬!!!
  回复  引用    

标题  
姓名  
主页
Email (博主才能看到) 
验证码 *  看不清,换一张 [登录][注册]
内容(请不要发表任何与政治相关的内容)  
博客园首页

新闻频道

社区

小组

博问

网摘

闪存

  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
成果网帮您增加网站收入


相关链接: