MEF,扩展预览

MEF,a primitive!

MEF,扩展预览MEF,"发现-重用-可动态组合";不依赖的特征编程。

 

什么是扩展?

扩展的本质是可以在多个程序中重用。扩展仍可以象原来一样,以程序特定的方式来实现。

 

MEF是什么?
MEF是微软为方便可扩展程序的创建,而提供的可管理的扩展框架简称,对程序扩展具有发现和组合能力。MEF是微软的原生框架,存在在.Net FX基准中。

 

用它解决什么问题?
通俗地说,就是支持插件模型。简化了运行时进行扩展这一问题的解决。

 

具体来说,MEF

(1)是宿主程序显化自身、揭示和曝光自已,为使用(或消费)外部扩展提供标准方式,而且对于扩展的互相依赖,则要做到正确组织、按正确的顺序将它们连接在一起;

(2)宿主程序定位和载入相关可行的扩展,发现机制的支持;

(3)允许使用额外的元数据以标记扩展,方便富查询和过滤。结构图如下。


MEF,扩展预览
 

  

怎么解决的?
核心是两块儿:目录表和容器。
目录表(catalog),用于发现扩展;
组合容器(CompositionContainer),协调实例创建并满足依赖关系。

MEF,扩展预览 

最重要的类是哪个?

组合部件类(ComposablePart),有下列作用:

 

(1)组合部件类提供一至多个输出(Exports),当然后者也可能依赖到一至多个外部提供的服务或输入(Imports);

 

(2)组合部件类用来管理实例,MEF会缺省实现--给定类型(given type)的对象实例。只要遵循输入/输出合约,便一直支持可扩展可增添的组合部件实现;

 

(3)每个输入和输出都有合约(合约即输入和输出间的桥),输出合约可更进一步包括元数据,根据发现(discovery)再进行过滤。

 

(4)容器通过与栏目交互去访问组合部件。容器本身解决了部件的依赖性,并把输出显化到外部世界。如需要,可以直接向容器添加组合部件的实例。

 

(5)栏目返回组合部件,很可能会是程序的扩展。可能会有宿主程序所提供组件的输入(依赖),并且可能有其它的输出。

 

(6)组合部件实现,缺省地,使用基于特征的元数据,进行输入和输出声明。

 

小记:

微软重要的融合机制。


MEF,扩展预览