代码改变世界

WPF插件式框架

2012-02-16 14:27 周永恒 阅读(...) 评论(...) 编辑 收藏

前言

  标题有点大,本文主要介绍了WPF插件式框架的一个思路,代码来自于以前给朋友写的一个Sample,细节地方不去关注,大致谈谈想法。

插件式架构

  插件式(AddIn)架构,不是一个新名词,应用程序采用插件式拼合,可以更好的支持扩展。很多著名的软件都采用了插件式的架构,如常见的IDE:EClipse,VisualStudio等等。

  这些插件式架构在实现上各有特色,但是基本原理大致相同:

  1. 定义插件框架,用来下载,创建,销毁插件,并管理插件间的通信等等。
  2. 定义插件契约,定义统一的接口规范。
  3. 实现插件组件,组件实现插件契约,在运行时可以被插件框架所发现并集成。

  关于插件式架构的实现技术,可以有很多选择,使用动态链接库的导出函数,使用COM技术等等,这里选择的是.net的MEF,MEF(Managed Extensibility Framework)是微软集成在.net framework中的扩展性管理框架,VisualStudio2010就是使用了MEF来管理插件,关于MEF的具体使用,请参见MSDN,这里不详细介绍了。

设计与实现

  工程目录以及架构图如下所示:

1image

  Illusion中使用MEF实现了插件管理,通用的Services等等,Illusion作为一个Core模块,可以参见前文

  Workbench定义了插件的工作台,定义了UI的布局。

  Presentation定义了UI的具体实现,可以添加/替换UI的表现,默认提供了Ribbon和Default两种形式,可以点击选项-显示框架来动态切换整个UI。

总结

  插件式架构应用程序不是什么新奇的东西,把UI布局和UI表现分离,并支持插件式架构是设计时的一些想法,具体到项目应用还需要一定的完善。代码放置很久了,拿出来分享一下,希望对朋友们有所帮助。

  项目代码可以点击这里下载。

 

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