在上篇WPF -.Net 4.0解决了DataGrid分组时的内存泄露中说过由于内存泄露问题,OpenExpressApp升级到.Net4平台,然后升级后之前的compositewpf出了点问题。在OpenExpressApp考虑动态扩展组件机制方面,以前就考虑过MEF,但当时还不成熟,所以使用了compositewpf,而现在MEF已经成为了.Net第一公民,compositewpf又没有提供.Net4的版本,也很久没有升级了,也不明确它的发展方向,并且现在软件中有些内存泄露问题也与它有关,所以干脆使用MEF作为插件机制。这里把这两个一起提出,主要是从动态扩充组件来说的,它们实际上不是一个东西,可以并存的,在这里就不多说这些了,下面我主要介绍一下MEF的架构,希望从总体上有所了解,更改OpenExpressApp后我会再写篇文章介绍一下如何在OpenExpressApp中使用MEF的。
主要示意图
各种Export提供者从目录提取part信息,然后由CompositionContainer进行装配,其中每个part都包含Import和Export两部分内容。
主要组成图
由容器、基础类库和属性编程模型组成,组成东西其实不多,要想扩充自己的东西必须熟悉这些东西。
我现在只是想用MEF替代Prsim实现插件扩充机制,由于时间紧张也不能深入研究,所以目前也就是使用过其中一些类,如:CompositionContainer、CompositionBatch、AssemblyCatalog、DirectoryCatalog和属性标记等,后面我会具体将从Prsim更改为MEF的。
主要类图
具体内容可以参考:
Hosting the .NET Composition Primitives.pdf
其它
参考blog:
A Crash Course on the MEF Primitives
MEF: Dependencies are Queries?
Hosting the .NET Composition Primitives.pdf
在 .NET 4 中使用托管可扩展性框架构建可组合的应用程序
MSDN-Managed Extensibility Framework Overview
项目网站:
Managed Extensibility Framework
Managed Extensibility Framework Contrib
本文转自 jingen_zhou 51CTO博客,原文链接:http://blog.51cto.com/zhoujg/519269,如需转载请自行联系原作者