MEF学习
MEF基本概念。
The Managed Extensibility Framework or MEF is a library for creating lightweight, extensible applications。主要是用于让程序更易扩展。以接口为最基础的理解。
1.可以用静态类的静态方法实现。可以用接口来实现。但是与之有所不同。
a)用接口,每次调用都要New一个对象出来。MEF不用,始终处理的是同一个类
b)用接口,在调用时每次都要判断然后new不同的对象。MEF自己处理
2.MEF通过Export标示出要导出给其他地方使用的方法/类/属性。Export的时候指定类型。和Import的时候进行对应,由此程序知道在Import处需要导入的是怎样的一个对象。
3.ExportMetadata,能够定义导出的参数。属性名称和属性的值,实现对Export的扩展。
a)关键在于对属性名称的定义。在ExportMetadata[“属性名称字符串”,”属性值”]
外部在引用该对象的时候,该对象的Metadata里,有一个指定属性,定义了该属性的值。
b)因为外部在Import的时候,需要有一个地方来存放Export出来的对象及其元数据。Export出来的对象类型是已经定义好的借口类型,因此还需要一个对象来存放元数据。因此定义一个借口来存放元数据里的相关属性数据,需要注意的是,该借口的属性名称应该与ExportMatadata里所指定的属性名称一致。
c)ExportMetadata存在的意义在于,对于同样Export的类型的(有共性)东西,能够进行区分从而有不同的功能,因此用Metadata来进行区别。所以在Import的地方,需要使用[ImportMany],并且声明为List<Lazy(IExportType,IExportData)>。含义为Import多种,并且是延迟引入,在使用的时候再去构建