[MEF]第02篇 MEF的导入导出契约
来源:互联网 发布:iphone屏幕录制软件 编辑:程序博客网 时间:2024/06/05 11:33
一、演示概述
此演示介绍了如何为Export指定导出的协议名和类型,以及如何为Import指定导入的协议名和类型,只有确保导出和导入的协议名和类型相匹配了,才能注入成功,否则注入就会失败。
相关下载(屏幕录像):http://yunpan.cn/cZIxLTJgGhpvp 访问密码 3b86
在线播放:http://v.youku.com/v_show/id_XOTIzNTU0ODUy.html
温馨提示:如果屏幕录像和代码不能正常下载,可站内留言,或发邮件到524130780@QQ.COM
欢迎有兴趣研究.NET相关技术的网友加QQ群:18507443
二、关键代码
包含协议名和类型的导出:
[Export("SQL", typeof(ILogger))]public class SqlLogger : ILogger{ public void WriteLog(string message) { Console.WriteLine("SQL Logger => {0}", message); }}
其中Export的第一个参数是协议名称,第二个参数则是导出的类型。对应的导入代码如下:
[Import("SQL", typeof(ILogger))]public ILogger SqlLogger { get; set; }
只包含导出协议名的导出:
[Export("Oracal")]public class OracalLogger : ILogger{ public void WriteLog(string message) { Console.WriteLine("Oracal Logger => {0}", message); }}上述导出协议并未指定导出类型,因此就以所修饰类作为其导出类型,即OracalLogger。相应的导入代码为:
[Import("Oracal")]public OracalLogger OracalLogger { get; set; }
其中属性的类型是OracalLogger,而不是ILogger。如果类型为ILogger,导入就会失败。
只包含导出类型的导出:
[Export(typeof(ILogger))]public class TxtLogger : ILogger{ public void WriteLog(string message) { Console.WriteLine("Text Logger => {0}", message); }}上述导出协议未指定导出协议名称,只指定了导出类型。则相应的导入代码为:
[Import(typeof(ILogger))]public ILogger TextLogger { get; set; }
既不包含导出类型,也不包含导出协议名称的导出:
[Export]public class XmlLogger : ILogger{ public void WriteLog(string message) { Console.WriteLine("Xml Logger => {0}", message); }}上述代码的导出协议名为默认协议,类型则与所修改的类相同,即XmlLogger,与之匹配的导入代码应该如下所示:
[Import]public XmlLogger XmlLogger { get; set; }
务必确保导入属性XmlLogger的属性类型与导出特性修饰的类型保持一致,否则导入失败。
三、相关资源
1、MSDN官方资料:http://msdn.microsoft.com/zh-cn/library/dd460648(v=vs.110).aspx
1 0
- [MEF]第02篇 MEF的导入导出契约
- MEF 方法的导入/导出
- [MEF]第04篇 MEF的多部件导入(ImportMany)和目录服务
- [MEF]第05篇 MEF的目录(Catalog)筛选
- [MEF]第01篇 MEF使用入门
- [MEF]第03篇 MEF延迟加载导出部件及元数据
- MEF
- MEF
- MEF
- Mef
- MEF应用(3) 导入导出续
- 实战MEF(2):导出&导入
- MEF程序设计指南三:MEF中组合部件(Composable Parts)与契约(Contracts)的基本应用
- MEF程序设计指南三:MEF中组合部件(Composable Parts)与契约(Contracts)的基本应用
- MEF程序设计指南三:MEF中组合部件(Composable Parts)与契约(Contracts)的基本应用
- [MEF程序设计指南]定义可以组合的部件和契约
- 第06篇 MEF部件的生命周期(PartCreationPolicy)
- MEF程序设计指南四:使用MEF声明导出(Exports)与导入(Imports)
- 守护(Daemon)线程的创建及运行
- 利用HTML实现限制ip的投票网站作弊方案
- Construct binary tree from preorder and inoder--LeetCode
- Android开源通信框架之——EventBus
- c++引用与指针的比较
- [MEF]第02篇 MEF的导入导出契约
- 013:元组:戴上了枷锁的列表
- 用Meta标签代码让360双核浏览器默认极速模式
- hadoop文件系统访问权限修改延迟,或者是权限更新延迟,权限缓存问题
- UVa 11805 - Bafana Bafana
- 开机后自启动app
- 厦门展览制作工厂——环球汇展在C博客安家拉
- 关于分治法的时间复杂度
- 智能卡的发展,以及射频电子标签在其中所处的位置