组成部件(Composable Parts )
组成部件是MEF内部的组成单元。组成部件导出其它组成部件需要的服务,并且从其它组成部件导入其所需的服务。
组成部件的导入由属性[System.ComponentModel.Composition.Import]定义
组成部件的导出由属性 [System.ComponentModel.Composition.Export]定义
一个组成部件至少包含一个导出。组成部件被添加到容器或或通过目录被创建出来。
默认的目录是,MEF通过组成部件的导出属性标识来识别。
Contracts 合同
组成部件之间不是直接调用的,而是依据合同,一个字符串标识符。每个导出都有一个合同,每个导入都声明一个它需要的合同。
容器通过合同来匹配导入和导出。如果没有定义合同,MEF将隐式使用类型的完全限定名作为合同。
一下导出的合同是等效的。
Interface / Abstract contracts
通过使用接口和抽象类,将大大降低耦合程度。
以下代码中两个发送者都实现了IMessageSender。Notifier导入了其Sends()调用的IMEssageSender。
可以看出,新的发送者将很容易被添加到系统中。