概述

上一篇介绍了MEF的一个很简单很基本的应用,实现了MEF框架并展示了MEF框架的一些基本的要求和设置,这些基础知识很重要,接下来我们分析一下如何扩展或增强MEF框架内容。

增强的Contract类库

其实有了上篇的介绍,读者很快会发现,Contract类库制约性很强,或者说“它”只引用了windows自带的System.XXX类型的公共类库,而往往在协议中我们是要引用我们实际项目工程中的方法和成员,这样就导致了要依赖一个非系统的公共类库,例如Practise_MEF.Core。那能否还能实现,我的插件仅仅生成一个“类库DLL”呢?

首先我们来看一下依赖性图解:

这里所有项目工程都将依赖于Core,这其中Practise_MEF和Practise_MEF.contract是直接引用(Copy Local = true),Practise_MEF.Plugin.MultiCalculateEx是间接引用(Copy Local = false),这里CalculateEx这个项目没有引用Core,如果引用的话也为间接引用。扩展库通过间接引用后将不产生或复制Core.DLL,而是依赖于宿主(一般指调用扩展类库的UI类库,这里是Practise_MEF),这样插件类库只会产生本身类库的DLL而不会产生引用的DLL,至少看起来比较工整。

项目重构

有了上面这些技术上的铺垫,我们就为重构为MEF架构的软件提供了一条光明的道路。然而,道路永远是曲折的。

首先,既然框架式基于协议的,那就得分析要重构的项目中哪些是公共的属性、方法,以便提取出接口,这是至关重要的,如果没有共性,那重构本身的意义并不是很大。

在整理、提取项目核心类库的过程中,我认为一下几个方面值得提出到Core中:

  1. BaseForm
  2. 基础的Module/Entity/Objects
  3. 接口Interface
  4. 枚举Enum
  5. 委托Delegate
  6. 工具类Utility
  7. 基础方法Fucntion

。。。

其它,业务逻辑、非基础方法则提取到BLL等上层模块中。

Docker框架

在Winform下推荐WeifenLuo的DockPanel插件,这个插件实现起来简单方便、功能强大,可以将插件的Form作为Docker的一个子集加入其中,布局上类似于Visual Studio 编辑器。

介绍WeifenLuo:

http://www.cnblogs.com/wuhuacong/archive/2009/07/09/1520082.html

总结

有了以上三个方面的积累,使得重构成为MEF插件框架成为可能。

由于此项目尚在开中,故相关代码不宜公开。

最新文章

  1. MarkdownPad2 表格不显示处理
  2. Java设计模式 工厂模式概念解析
  3. 找不到或无法加载主类 org.codehaus.plexus.classworlds.launcher.Launcher
  4. Part 8 Coalesce function in sql server
  5. WPF学习(二)布局与菜单、工具栏
  6. 大富豪APK安卓客户端的反编译修改和重新打包
  7. Pyhon学习_04_字典、集合
  8. web服务器之nginx和apache的区别
  9. 基于stm32f427实现SVPWM控制永磁同步开环转动
  10. vue bus的使用
  11. 解决Ubuntu中文显示为乱码
  12. [poj3046][Ant counting数蚂蚁]
  13. 我发起了一个 .Net 开源 数据库 项目 SqlNet
  14. jQuery中attr和prop方法的区别说明
  15. 在Docker中运行纸壳CMS并配置使用MySql
  16. 高可用OpenStack(Queen版)集群-6.Nova控制节点集群
  17. [svc][op]ssh交互yes问题解决-expect
  18. GIS-012-ArcGIS JS API 绘图
  19. 卷积 & 杜教筛
  20. 大数据-zookeeper集群安装

热门文章

  1. 清空select内容
  2. codeforces 711A A. Bus to Udayland(水题)
  3. codeforces 709B B. Checkpoints(水题)
  4. C++ 基础笔记(一)
  5. [转] 值得推荐的C/C++框架和库
  6. Android优化——UI优化(三)使用ViewStub延迟加载
  7. FMDB 使用方法
  8. Java NIO 概述
  9. Spring之AOP
  10. poj1012