Spiga

Illusion = Caliburn.Micro + MEF

2011-07-18 12:05 by 周永恒, 1764 visits, 收藏, 编辑

前言

  准备使用Caliburn.Micro结合MEF写一个类似于VS2010的IDE框架,支持插件开发,Menu、Toolbar等的可配置性,还有一些功能如:Option,多语言,换肤等。一方面作为技术沉淀,一方面也可以为新入WPF或者对Caliburn.Micro感兴趣的朋友们做一个指导。

  没想到什么太好的名字,项目起名为Illusion,希望不是个幻觉,Shifty。 项目的出发点也不复杂,主要想使用MEF来做插件开发,通过DirectoryCatalog来做插件检查,使用Export/Import构建Menu,Toolbar等。Caliburn.Micro是一个开源框架,框架基于MVVM模式,代码简洁而不简单,是企业级项目开发的一把利器。

实现

  工程目录如下:

Illusion

  Illusion工程是核心的框架(Framework),Illusion.Demo是使用Illusion的EXE工程,AddIns文件夹下下有一些插件工程,项目使用了开源比较成熟的AvalonDock做停靠窗口。

  运行起来的程序:

UIW

  项目提出了两个概念:Part,Screen。如上图所示,Menu和Toolbar的子项称为Part,停靠的窗口Project等称为Screen。

配置

  添加Menu的代码如下:

   1: [MenuPart(BaseMenu = WorkbenchName.WindowPart, PreviousMenu = WorkbenchName.CloseDocumentsPart)]
   2: public class ResetLayoutPart : MenuPart
   3: {
   4:     public ResetLayoutPart()
   5:         : base(WorkbenchName.ResetLayoutPart)
   6:     {
   7:         Icon = "Icons.16x16.CopyIcon";
   8:     }
   9:  
  10:     public override void Execute()
  11:     {
  12:         base.Execute();
  13:     }
  14: }

  第一行的MenuPart继承自ExportAttribute,等同于[Export(typeof(IMenuPart)],BaseMenu和PreviousMenu指定了ResetLayoutPart的父项和它的上一个Menu,以此来确定Menu的位置。当Menu点击时,Execute方法被调用,在此写入Menu的执行代码。可以重载CanExecute来决定Menu是否可调用,设置IsVisible属性来决定Menu是否可见。

  通常情况下,很多Menu同时也会在Toolbar上出现,为了减少重复代码,定义了MenuToolPart类指定该Part既可以是Menu也可以充当Toolbar。

  Screen的添加方法和Part类似,略去不讲。

其他

  可以添加插件工程导出Part或Screen等。

add

  程序运行后,DirectoryCatalog会监视AddIns目录下所有插件并导入。

  其他一些Option,多语言,换肤功能请参见代码,这里不一一介绍了。

闲聊

  Illusion项目陆陆续续写了一周多,想法变为代码,激情过后都是空虚,闭门造车也需要耐心,这些年业余写了好多代码后来都扔一边去了。

  把代码上传上来和大家交流一下,如果有对这方面感兴趣的朋友欢迎和我联系,也不加什么PL协议了,有不足之处欢迎指正,有能用之处欢迎拿去用。如果真能对您有所帮助的话,希望你能留个言或者顶一下,江湖话说:

做兄弟,要厚道

 

Illusion的代码下载请点击这里,使用了System.Windows.Interactivity,需要Expression Blend4以上版本支持。

 

本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

Add your comment

12 条回复

  1. #1楼 张少峰      2011-07-18 12:18
    看到项目名被吸引进来了,还以为楼主要谈I社的游戏呢。误会误会~
     回复 引用 查看   
  2. #2楼 平繁      2011-07-18 12:25
    好H的名字啊,我也是被名字吸引进来的....
     回复 引用 查看   
  3. #3楼 酱油路过[未注册用户]2011-07-18 13:10
    引用平繁:好H的名字啊,我也是被名字吸引进来的....

    me 2
     回复 引用   
  4. #4楼[楼主] 周永恒      2011-07-18 13:18
    @平繁
    @张少峰
    哈哈,真谛,淡定淡定。。。
     回复 引用 查看   
  5. #5楼 木鱼      2011-07-18 14:31
    我第一眼就想到了这是I社的游戏。。。
     回复 引用 查看   
  6. #6楼 成群      2011-07-19 09:09
    好名字~
     回复 引用 查看   
  7. #7楼 超级奶崽      2011-07-19 10:06
    支持
     回复 引用 查看   
  8. #8楼 Curry      2011-07-19 23:29
    个人感觉VS的这种IDE不太好用,太专业,而且屏幕小的话用着很难过。只是它迎合了某些技术的幻想。

    最近在项目上有同事在鼓捣VS的IDE,弄的很痛苦,而效果却使人感到很一般,但市面上的开发工具的UI却都相类似,难道就没有什么变革?
     回复 引用 查看   
  9. #9楼 孤狼晖      2011-09-24 16:22
    很需要这样一个例子,顶啦~
     回复 引用 查看   
  10. #10楼 stillwater      2011-11-13 18:51
    不错,谢谢楼主,收了学习!
     回复 引用 查看   
  11. #11楼 jackyped      2012-02-15 17:07
    标记一下。
     回复 引用 查看   
  12. #12楼 火禾      2012-02-16 19:50
    不错,学习了!
     回复 引用 查看   
发表评论

昵称: [登录] [注册]

主页:

邮箱:(仅博主可见)

评论内容:

  登录  注册

[使用Ctrl+Enter键快速提交评论]

0 2109345 zvSonuqvbHE=