[MEF]第02篇 MEF的导入导出契约
一、演示概述
此演示介绍了如何为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
[MEF]第02篇 MEF的导入导出契约的更多相关文章
- [MEF]第04篇 MEF的多部件导入(ImportMany)和目录服务
一.演示概述此演示介绍了MEF如何使用ImportMany特性同时导入多个与相同约束相匹配的导出部件,并且介绍了目录服务(Catalog),该服务告知MEF框架可以在什么地方去搜寻与指定约束匹配的导出 ...
- [MEF]第01篇 MEF使用入门
一.演示概述 此演示初步介绍了MEF的基本使用,包括对MEF中的Export.Import和Catalog做了初步的介绍,并通过一个具体的Demo来展示MEF是如何实现高内聚.低耦合和高扩展性的软件架 ...
- [MEF]第03篇 MEF延迟加载导出部件及元数据
一.演示概述此演示介绍了MEF的延迟加载及元数据相关的内容.在实际的设计开发中,存在着某些对象是不需要在系统运行或者附属对象初始化的时候进行实例化的,只需要在使用到它的时候才会进行实例化,这种方式就可 ...
- [MEF]第05篇 MEF的目录(Catalog)筛选
一.演示概述本示例演示如何使用MEF提供的目录(Catalog)的扩展机制实现可过滤导出部件的自定义目录类.主要是通过继承ComposablePartCatalog基类,并实现接口INotifyCom ...
- C#可扩展编程之MEF学习笔记(三):导出类的方法和属性
前面说完了导入和导出的几种方法,如果大家细心的话会注意到前面我们导出的都是类,那么方法和属性能不能导出呢???答案是肯定的,下面就来说下MEF是如何导出方法和属性的. 还是前面的代码,第二篇中已经提供 ...
- Excel导入导出(篇二)
<body> <h3>一.Excel导入</h3> <h5>.模板下载:<a href="UpFiles/TemplateFiles/学 ...
- 【mongoDB运维篇②】备份与恢复(导入与导出)
导入/导出可以操作的是本地的mongodb服务器,也可以是远程的服务器 所以,都有如下通用选项: -h host 主机 --port port 端口 -u username 用户名 -p passwd ...
- 分享一次Oracle数据导入导出经历
最近工作上有一个任务要修改一个比较老的项目,分公司这边没有这个项目数据库相关的备份,所以需要从正式环境上面导出数据库备份出来在本地进行部署安装,之前在其它项目的时候也弄过这个数据库的部署和安装,也写了 ...
- 通过 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-16-1 LVM管理和ssm存储管理器使用&磁盘配额
大纲: 1-1- LVM逻辑卷的管理 1-2- SSM管理工具的使用 1-3- 磁盘配额技巧 ====================================== 问题描述: 当我们需要在一个 ...
- Hibernate入门_增删改查
一.Hibernate入门案例剖析: ①创建实体类Student 并重写toString方法 public class Student { private Integer sid; private ...
- 初次安装git配置用户名和邮箱及密钥
在Windows上安装Git: 在Windows上使用Git,可以从Git官网直接下载安装程序,(网速慢的同学请移步国内镜像),然后按默认选项安装即可. 安装完成后 键盘敲上:windows+r你会看 ...
- ZOJ 2283 Challenge of Wisdom 数论,Dilworth Theorem,求最长反链 难度:2
Challenge of Wisdom Time Limit: 2 Seconds Memory Limit: 32768 KB Background "Then, I want ...
- 【51nod-1396】还是01串
给定一个0-1串s,长度为n,下标从0开始,求一个位置k,满足0<=k<=n, 并且子串s[0..k - 1]中的0的个数与子串s[k..n - 1]中1的个数相等. 注意: (1) 如果 ...
- *SCM-MANAGER独立部署方式
从官网获取最新版本 scm-manager 独立安装包 https://www.scm-manager.org/download/ 解压 为合适的路径 修改 services.bat 文件服务相关信息 ...
- 利用国内镜像下载Android源码,并编译生成image镜像文件
为了编译安卓源码,首先需要一个Linux,本次采用Ubuntu Kylin14.04,内核版本3.13.装在四核.4G内存.1T硬盘的虚拟机上查看内核版本号:$uname -all清华镜像地址清华镜像 ...
- TI IPNC Web网页之进阶修改
GoDB内嵌HTML 原始的页面里面已经有一个内嵌HTML的例子了,那就是维护支持页面.下图是稍微修改后的页面...请自行脑补. 这里使用的是上一节所说的gdo containter的方法. 打开ma ...
- 本地如何搭建IPv6环境测试你的APP(转)
IPv6的简介 IPv4 和 IPv6的区别就是 IP 地址前者是 .(dot)分割,后者是以 :(冒号)分割的(更多详细信息自行搜索). PS:在使用 IPv6 的热点时候,记得手机开 飞行模式 哦 ...
- 企业号验证后携带URL参数跳转问题
http://report.dyxx.com/authorize/weixinlogin.aspx?url=http://user.dyxx.com/Xshow/lsWX.aspx?code=0000 ...