MEF Composable Parts and Contracts
2011-04-15 16:26
169 查看
组成部件(Composable Parts )
组成部件是MEF内部的组成单元。组成部件导出其它组成部件需要的服务,并且从其它组成部件导入其所需的服务。
组成部件的导入由属性[System.ComponentModel.Composition.Import]定义
组成部件的导出由属性 [System.ComponentModel.Composition.Export]定义
一个组成部件至少包含一个导出。组成部件被添加到容器或或通过目录被创建出来。
默认的目录是,MEF通过组成部件的导出属性标识来识别。
Contracts 合同
组成部件之间不是直接调用的,而是依据合同,一个字符串标识符。每个导出都有一个合同,每个导入都声明一个它需要的合同。
容器通过合同来匹配导入和导出。如果没有定义合同,MEF将隐式使用类型的完全限定名作为合同。
一下导出的合同是等效的。
Interface / Abstract contracts
通过使用接口和抽象类,将大大降低耦合程度。
以下代码中两个发送者都实现了IMessageSender。Notifier导入了其Sends()调用的IMEssageSender。
可以看出,新的发送者将很容易被添加到系统中。
组成部件是MEF内部的组成单元。组成部件导出其它组成部件需要的服务,并且从其它组成部件导入其所需的服务。
组成部件的导入由属性[System.ComponentModel.Composition.Import]定义
组成部件的导出由属性 [System.ComponentModel.Composition.Export]定义
一个组成部件至少包含一个导出。组成部件被添加到容器或或通过目录被创建出来。
默认的目录是,MEF通过组成部件的导出属性标识来识别。
Contracts 合同
组成部件之间不是直接调用的,而是依据合同,一个字符串标识符。每个导出都有一个合同,每个导入都声明一个它需要的合同。
容器通过合同来匹配导入和导出。如果没有定义合同,MEF将隐式使用类型的完全限定名作为合同。
一下导出的合同是等效的。
namespace MEFSample { [Export] public class Exporter {...} [Export(typeof(Exporter))] public class Exporter1 {...} [Export("MEFSample.Exporter")] public class Exporter2 {...} }
Interface / Abstract contracts
通过使用接口和抽象类,将大大降低耦合程度。
以下代码中两个发送者都实现了IMessageSender。Notifier导入了其Sends()调用的IMEssageSender。
可以看出,新的发送者将很容易被添加到系统中。
[Export(typeof(IMessageSender))] public class EmailSender : IMessageSender { ... } [Export(typeof(IMessageSender))] public class TCPSender : IMessageSender { ... } public class Notifier { [ImportMany] public IEnumerable<IMessageSender> Senders {get; set;} public void Notify(string message) { foreach(IMessageSender sender in Senders) sender.Send(message); } }
相关文章推荐
- MEF系列二:定义部件(Parts)和契约(Contracts)
- MEF Parts Sample
- MEF程序设计指南三:MEF中组合部件(Composable Parts)与契约(Contracts)的基本应用
- Street-to-Shop: Cross-Scenario Clothing Retrieval via Parts Alignment and Auxiliary Set
- Using Truffle to Create and Deploy Smart Contracts
- Learning WCF Chapter2 WCF Contracts and Serialization
- MEF程序设计指南三:MEF中组合部件(Composable Parts)与契约(Contracts)的基本应用
- Using Wppackager to Package and Deploy Web Parts for Microsoft SharePoint Products and Technologies
- DrawThemeBackground的Parts and States
- Capture and Name Parts of the Match (抓取和命名匹配中的部分)
- Free PCB Footprints and Schematic Symbols for Millions of Parts - SnapEDA
- End-to-End Learning of Deformable Mixture of Parts and Deep Convolutional Neural Networks for Human
- AsOne Auto Body Parts and Truck Parts
- Lua: Good, bad, and ugly parts
- WCF Contracts and Backward Compatibility
- ASP.NET Portal Framework and Web Parts
- Web Parts, Impersonate and Security Policy
- Building Web Parts for Microsoft SharePoint Products and Technologies
- 【转】MEF程序设计指南三:MEF中组合部件(Composable Parts)与契约(Contracts)的基本应用
- How To Write, Deploy, and Interact with Ethereum Smart Contracts on a Private Blockchain