MEF学习总结(2)---Primitive层

Primitive层是属于依赖注入的通用模型,主要有如下核心类型:

1. ComposablePart是核心类,他表示组件容器中的每一个组件,是对真正组件实例的包装。ExportDefinition属性定义了该组件对外提供的功能描述。ImportDefinition属性定义了该组件对别的组件的依赖。Metadata是组件对自身的一些元数据的描述。该描述可成为别的组件导入依赖是的查询条件。

2. ComposablePartDefinition是ComposablePart的工厂类,它可以创建ComposablePart的实例。当然它也需要定义他所能创建组件的ImportDefinition和ExportDefinition和Metadata.

3. ComposablePartCatalog是一个负责发现并创建ComposablePartDefinition对象的组件仓库,他负责根据自身发现规则去发现所有的Composable的组件class,并为每一个组件class创建一个ComposablePartDefinition对象。MEF中内置了如下Catalog:

System.ComponentModel.Composition.Primitives.ComposablePartCatalog
    System.ComponentModel.Composition.Hosting.AggregateCatalog
    System.ComponentModel.Composition.Hosting.ApplicationCatalog
    System.ComponentModel.Composition.Hosting.AssemblyCatalog
    System.ComponentModel.Composition.Hosting.CompositionScopeDefinition
    System.ComponentModel.Composition.Hosting.DirectoryCatalog
    System.ComponentModel.Composition.Hosting.FilteredCatalog
    System.ComponentModel.Composition.Hosting.TypeCatalog

每一种catalog定义了一类组件发现规则。

4. ExportDefinition是组件对外提供那些功能的描述。ContractName就是对外提供功能的标识符,Metadata则是这个功能的描述数据

5. ImportDefinition是定义组件对别的组件的依赖的描述。Constraint是一个用来匹、配符合条件的组件的表达式

6. Export是一个对组件实例的包装,当根据Import进行依赖填充时,Export对象表示根据Import匹配条件获取到的Export。GetExportedObject方法可以得到真正的组件实例。

Primitive层主要是定义了一套通用的依赖的表达,发现,和注入的模型。上层的Container层是该通用模型的消费者。

posted @ 2017-10-29 14:15  self.refactoring  阅读(240)  评论(0编辑  收藏  举报