随笔 - 44  文章 - 0 评论 - 304 trackbacks - 88
<2007年3月>
25262728123
45678910
11121314151617
18192021222324
25262728293031
1234567

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

与我联系

搜索

 

常用链接

留言簿(20)

我参加的小组

我参与的团队

随笔分类(40)

随笔档案(44)

文章分类

联系我

友情链接

积分与排名

  • 积分 - 173668
  • 排名 - 207

最新评论

阅读排行榜

评论排行榜

      既然做好了框架,我们就希望为某个目标服务,我们要提供一些基本的服务,方便用户继续扩展他的功能。首先想到的功能就是,菜单,工具栏的管理,接下来我们要实现一些更流行的功能,比如停靠工具栏等等。
       如何实现这些服务呢?我们希望我们的插件在运行时可以获得应用程序本身的菜单,工具条,停靠工具栏等等,然后向他们添加项目,比如加入一个菜单项,添加一个工具栏按钮。为了在运行时获得某个菜单或者工具栏,我们要为每一个菜单后者工具栏分配一个Key,然后放到一个词典中,当需要的时候,我们通过这个key来获得实例。对于这个Key呢,在我的例子比较简单就是他的名字,我们来看看ToolStripService的代码:

using System;
using System.Collections.Generic;
using System.Text;
using System.Windows.Forms;

namespace PluginFramework
{
    
public class ToolStripService:IToolStripService
    
{
        
private IApplication application = null;
        
private Dictionary<String, ToolStrip> toolStrips = new Dictionary<string, ToolStrip>();

        
public ToolStripService(IApplication application)
        
{
            
this.application = application;
        }


        
IToolStripService Members
    }

}

      对于视图或者是停靠工具栏来说,最好是不要直接在词典中放入实例,而是应该将对象的类型放入到词典中,因为,视图和停靠工具栏本身都是从Form派生而来,所以,当视图或者是停靠工具栏被关闭的时候,对象就被销毁了,而对象的创建在是插件的Load方法里完成的,我们不可能再去调用插件的Load方法,这样给我们的使用带来了不便,所以我们应该注册类型,然后在Service中实现一个Show方法是比较合理的,这里为了演示方便,我就直接在Load里面实例化了,并把实例放到了词典里。
      下边这个图例里显示了插件加入的停靠工具栏,工具栏,一个新的菜单“View”和View菜单的子菜单:
      
       
      
最近实在是没有时间,文章发的很慢,也写的很错,说的不清楚的地方,可以参考一下源代码,望各位朋友见谅。

      源代码

posted on 2007-03-26 23:27 纶巾客 阅读(3830) 评论(12)  编辑 收藏 网摘 所属分类: .Net Framework

FeedBack:
#1楼  2007-03-27 08:40 Vokobo      
你启发了我,还一笑而过...
  回复  引用  查看    
#2楼  2007-03-27 09:16 書生      
又见高手的文章了,呵呵,希望这个系列能长点,毕竟把插件式的程序讲解得这么详细的文章不多,希望能再看到博主更多的精彩文章
  回复  引用  查看    
不错哦.学习学习.再过段时间我的开发插件就可以用了.
  回复  引用    
#4楼  2007-03-28 16:17 Bill.Gates [未注册用户]
出去了几天,回来第一件事情就是过来学习
  回复  引用    
#5楼  2007-03-28 18:25 firefox [未注册用户]
好东西。
  回复  引用    
#6楼  2007-03-30 10:59  . [未注册用户]
楼主周末再出一篇学习下
  回复  引用    
#7楼  2007-04-15 22:50 Anthan      
有个建议哈,大家与其有时间在这发帖逼博主更新不如自己多研究一下,完了互相讨论一下也好啊。
人多力量大嘛,申明我不是博主的拖噢,更不是马甲哈,呵呵
  回复  引用  查看    
#8楼  2007-04-16 19:40 Bill.Gates [未注册用户]
博主忙,不过从这里学到不少东东啊
  回复  引用    
#9楼  2007-04-29 10:29 David.Dong [未注册用户]
博主,有个问题能不能回答一下。在你的源码中,PluginFramework  里定义了一个类public class DockBar:DockContent,IApplicationProvider,请问 如果我用普通的窗口或者组合应用把DockContent改成什么?
DockContent GetDockBar(String dockBarName); 里的DockContent应该怎么改?
多谢!
  回复  引用    
#10楼  2007-06-13 16:52 zss [未注册用户]
多谢博主
  回复  引用    
#11楼  2008-03-12 10:21 wxf [未注册用户]
真是好啊,学习中
  回复  引用    
#12楼  2008-07-11 15:20 凤 [未注册用户]
如题所说.
  回复  引用    

标题  
姓名  
主页
Email (博主才能看到) 
验证码 *  看不清,换一张 [登录][注册]
内容(请不要发表任何与政治相关的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
"五向定位"职业成长路线公开课(上海、南京、大连)
Google站内搜索


相关链接: