一、演示概述
此演示介绍了如何为Export指定导出的协议名和类型,以及如何为Import指定导入的协议名和类型,只有确保导出和导入的协议名和类型相匹配了,才能注入成功,否则注入就会失败。
相关下载(屏幕录像)http://yunpan.cn/cZIxLTJgGhpvp  访问密码 3b86
在线播放http://v.youku.com/v_show/id_XOTIzNTU0ODUy.html
温馨提示:如果屏幕录像和代码不能正常下载,可站内留言,或发邮件到524130780@QQ.COM

欢迎有兴趣研究.NET相关技术的网友加QQ群:18507443

二、关键代码

包含协议名和类型的导出:

  1. [Export("SQL", typeof(ILogger))]
  2. public class SqlLogger : ILogger
  3. {
  4. public void WriteLog(string message)
  5. {
  6. Console.WriteLine("SQL Logger => {0}", message);
  7. }
  8. }

其中Export的第一个参数是协议名称,第二个参数则是导出的类型。对应的导入代码如下:

  1. [Import("SQL", typeof(ILogger))]
  2. public ILogger SqlLogger { get; set; }

只包含导出协议名的导出:

  1. [Export("Oracal")]
  2. public class OracalLogger : ILogger
  3. {
  4. public void WriteLog(string message)
  5. {
  6. Console.WriteLine("Oracal Logger => {0}", message);
  7. }
  8. }

上述导出协议并未指定导出类型,因此就以所修饰类作为其导出类型,即OracalLogger。相应的导入代码为:

  1. [Import("Oracal")]
  2. public OracalLogger OracalLogger { get; set; }

其中属性的类型是OracalLogger,而不是ILogger。如果类型为ILogger,导入就会失败。

只包含导出类型的导出:

  1. [Export(typeof(ILogger))]
  2. public class TxtLogger : ILogger
  3. {
  4. public void WriteLog(string message)
  5. {
  6. Console.WriteLine("Text Logger => {0}", message);
  7. }
  8. }

上述导出协议未指定导出协议名称,只指定了导出类型。则相应的导入代码为:

  1. [Import(typeof(ILogger))]
  2. public ILogger TextLogger { get; set; }

既不包含导出类型,也不包含导出协议名称的导出:

  1. [Export]
  2. public class XmlLogger : ILogger
  3. {
  4. public void WriteLog(string message)
  5. {
  6. Console.WriteLine("Xml Logger => {0}", message);
  7. }
  8. }

上述代码的导出协议名为默认协议,类型则与所修改的类相同,即XmlLogger,与之匹配的导入代码应该如下所示:

  1. [Import]
  2. public XmlLogger XmlLogger { get; set; }

务必确保导入属性XmlLogger的属性类型与导出特性修饰的类型保持一致,否则导入失败。

三、相关资源
1、MSDN官方资料:http://msdn.microsoft.com/zh-cn/library/dd460648(v=vs.110).aspx

[MEF]第02篇 MEF的导入导出契约的更多相关文章

  1. [MEF]第04篇 MEF的多部件导入(ImportMany)和目录服务

    一.演示概述此演示介绍了MEF如何使用ImportMany特性同时导入多个与相同约束相匹配的导出部件,并且介绍了目录服务(Catalog),该服务告知MEF框架可以在什么地方去搜寻与指定约束匹配的导出 ...

  2. [MEF]第01篇 MEF使用入门

    一.演示概述 此演示初步介绍了MEF的基本使用,包括对MEF中的Export.Import和Catalog做了初步的介绍,并通过一个具体的Demo来展示MEF是如何实现高内聚.低耦合和高扩展性的软件架 ...

  3. [MEF]第03篇 MEF延迟加载导出部件及元数据

    一.演示概述此演示介绍了MEF的延迟加载及元数据相关的内容.在实际的设计开发中,存在着某些对象是不需要在系统运行或者附属对象初始化的时候进行实例化的,只需要在使用到它的时候才会进行实例化,这种方式就可 ...

  4. [MEF]第05篇 MEF的目录(Catalog)筛选

    一.演示概述本示例演示如何使用MEF提供的目录(Catalog)的扩展机制实现可过滤导出部件的自定义目录类.主要是通过继承ComposablePartCatalog基类,并实现接口INotifyCom ...

  5. C#可扩展编程之MEF学习笔记(三):导出类的方法和属性

    前面说完了导入和导出的几种方法,如果大家细心的话会注意到前面我们导出的都是类,那么方法和属性能不能导出呢???答案是肯定的,下面就来说下MEF是如何导出方法和属性的. 还是前面的代码,第二篇中已经提供 ...

  6. Excel导入导出(篇二)

    <body> <h3>一.Excel导入</h3> <h5>.模板下载:<a href="UpFiles/TemplateFiles/学 ...

  7. 【mongoDB运维篇②】备份与恢复(导入与导出)

    导入/导出可以操作的是本地的mongodb服务器,也可以是远程的服务器 所以,都有如下通用选项: -h host 主机 --port port 端口 -u username 用户名 -p passwd ...

  8. 分享一次Oracle数据导入导出经历

    最近工作上有一个任务要修改一个比较老的项目,分公司这边没有这个项目数据库相关的备份,所以需要从正式环境上面导出数据库备份出来在本地进行部署安装,之前在其它项目的时候也弄过这个数据库的部署和安装,也写了 ...

  9. 通过 Sqoop1.4.7 将 Mysql5.7、Hive2.3.4、Hbase1.4.9 之间的数据导入导出

    目录 目录 1.什么是 Sqoop? 2.下载应用程序及配置环境变量 2.1.下载 Sqoop 1.4.7 2.2.设置环境变量 2.3.设置安装所需环境 3.安装 Sqoop 1.4.7 3.1.修 ...

随机推荐

  1. [spring]xml配置文件---节点解释

    转载:https://blog.csdn.net/u012099568/article/details/51423837

  2. js中中括号,大括号使用详解

    js中中括号,大括号使用详解 一.总结 一句话总结:{ } 是一个对象,[ ] 是一个数组 1.js大括号{}表示什么意思? 对象 { } 大括号,表示定义一个对象,大部分情况下要有成对的属性和值,或 ...

  3. java实现赋值excel模板,并在新文件中写入数据,并且下载

    /** * 生成excel并下载 */ public void exportExcel(){ File newFile = createNewFile(); //File newFile = new ...

  4. cJONS序列化工具解读二(数据解析)

    cJSON数据解析 关于数据解析部分,其实这个解析就是个自动机,通过递归或者解析栈进行实现数据的解析 /* Utility to jump whitespace and cr/lf *///用于跳过a ...

  5. 1-23-shell脚本之-if流程控制语句和for循环语句的使用

    大纲: 1.逻辑判断 2.if流程控制语句 3.for循环控制语句   ---------------------------------------------- 在开始之前,先了解一下逻辑判断符号 ...

  6. nginx和php-fpm的启停和配置

    一.nginx的启停 (1) 启动nginx /etc/init.d/nginx start (2) 停止nginx /etc/init.d/nginx stop (3) 重启nginx /etc/i ...

  7. Qt界面(控件)相关设计

    (转自:http://blog.chinaunix.net/uid-25799257-id-600157.html) 引言  最近在做数据库相关课程设计,所以就借此机会,先熟悉一下Qt的一些编程,同时 ...

  8. C++多线程1.createthread

    C++ 多线程知识1.多线程入门 CreateThread 20131021 1.介绍WinAPI中的CreateThread 函数原型: HANDLE WINAPI CreateThread( LP ...

  9. Frequently-Used Network Time Server(Base On NTP:Network Time Protocol)

    国家授时中心服务器               210.72.145.44 133.100.11.8    日本福冈大学 time-a.nist.gov                   129.6 ...

  10. FusionCharts制作实时刷新图

    转自:http://yklovejava-163-com.iteye.com/blog/1889949 下面介绍的是用FusionCharts制作实时刷新图的过程(FusionCharts确实太好用了 ...