[MEF]第02篇 MEF的导入导出契约
2016-05-12 20:32
316 查看
一、演示概述
此演示介绍了如何为Export指定导出的协议名和类型,以及如何为Import指定导入的协议名和类型,只有确保导出和导入的协议名和类型相匹配了,才能注入成功,否则注入就会失败。
相关下载(屏幕录像):http://yunpan.cn/cZIxLTJgGhpvp 访问密码 3b86
在线播放:http://v.youku.com/v_show/id_XOTIzNTU0ODUy.html
温馨提示:如果屏幕录像和代码不能正常下载,可站内留言,或发邮件到524130780@QQ.COM
欢迎有兴趣研究.NET相关技术的网友加QQ群:18507443
二、关键代码
包含协议名和类型的导出:
[csharp] view plain copy
![](https://code.csdn.net/assets/CODE_ico.png)
![](https://code.csdn.net/assets/ico_fork.svg)
[Export("SQL", typeof(ILogger))]
public class SqlLogger : ILogger
{
public void WriteLog(string message)
{
Console.WriteLine("SQL Logger => {0}", message);
}
}
其中Export的第一个参数是协议名称,第二个参数则是导出的类型。对应的导入代码如下:
[csharp] view plain copy
![](https://code.csdn.net/assets/CODE_ico.png)
![](https://code.csdn.net/assets/ico_fork.svg)
[Import("SQL", typeof(ILogger))]
public ILogger SqlLogger { get; set; }
只包含导出协议名的导出:
[csharp] view plain copy
![](https://code.csdn.net/assets/CODE_ico.png)
![](https://code.csdn.net/assets/ico_fork.svg)
[Export("Oracal")]
public class OracalLogger : ILogger
{
public void WriteLog(string message)
{
Console.WriteLine("Oracal Logger => {0}", message);
}
}
上述导出协议并未指定导出类型,因此就以所修饰类作为其导出类型,即OracalLogger。相应的导入代码为:
[csharp] view plain copy
![](https://code.csdn.net/assets/CODE_ico.png)
![](https://code.csdn.net/assets/ico_fork.svg)
[Import("Oracal")]
public OracalLogger OracalLogger { get; set; }
其中属性的类型是OracalLogger,而不是ILogger。如果类型为ILogger,导入就会失败。
只包含导出类型的导出:
[csharp] view plain copy
![](https://code.csdn.net/assets/CODE_ico.png)
![](https://code.csdn.net/assets/ico_fork.svg)
[Export(typeof(ILogger))]
public class TxtLogger : ILogger
{
public void WriteLog(string message)
{
Console.WriteLine("Text Logger => {0}", message);
}
}
上述导出协议未指定导出协议名称,只指定了导出类型。则相应的导入代码为:
[csharp] view plain copy
![](https://code.csdn.net/assets/CODE_ico.png)
![](https://code.csdn.net/assets/ico_fork.svg)
[Import(typeof(ILogger))]
public ILogger TextLogger { get; set; }
既不包含导出类型,也不包含导出协议名称的导出:
[csharp] view plain copy
![](https://code.csdn.net/assets/CODE_ico.png)
![](https://code.csdn.net/assets/ico_fork.svg)
[Export]
public class XmlLogger : ILogger
{
public void WriteLog(string message)
{
Console.WriteLine("Xml Logger => {0}", message);
}
}
上述代码的导出协议名为默认协议,类型则与所修改的类相同,即XmlLogger,与之匹配的导入代码应该如下所示:
[csharp] view plain copy
![](https://code.csdn.net/assets/CODE_ico.png)
![](https://code.csdn.net/assets/ico_fork.svg)
[Import]
public XmlLogger XmlLogger { get; set; }
务必确保导入属性XmlLogger的属性类型与导出特性修饰的类型保持一致,否则导入失败。
三、相关资源
1、MSDN官方资料:http://msdn.microsoft.com/zh-cn/library/dd460648(v=vs.110).aspx
此演示介绍了如何为Export指定导出的协议名和类型,以及如何为Import指定导入的协议名和类型,只有确保导出和导入的协议名和类型相匹配了,才能注入成功,否则注入就会失败。
相关下载(屏幕录像):http://yunpan.cn/cZIxLTJgGhpvp 访问密码 3b86
在线播放:http://v.youku.com/v_show/id_XOTIzNTU0ODUy.html
温馨提示:如果屏幕录像和代码不能正常下载,可站内留言,或发邮件到524130780@QQ.COM
欢迎有兴趣研究.NET相关技术的网友加QQ群:18507443
二、关键代码
包含协议名和类型的导出:
[csharp] view plain copy
![](https://code.csdn.net/assets/CODE_ico.png)
[Export("SQL", typeof(ILogger))]
public class SqlLogger : ILogger
{
public void WriteLog(string message)
{
Console.WriteLine("SQL Logger => {0}", message);
}
}
其中Export的第一个参数是协议名称,第二个参数则是导出的类型。对应的导入代码如下:
[csharp] view plain copy
![](https://code.csdn.net/assets/CODE_ico.png)
[Import("SQL", typeof(ILogger))]
public ILogger SqlLogger { get; set; }
只包含导出协议名的导出:
[csharp] view plain copy
![](https://code.csdn.net/assets/CODE_ico.png)
[Export("Oracal")]
public class OracalLogger : ILogger
{
public void WriteLog(string message)
{
Console.WriteLine("Oracal Logger => {0}", message);
}
}
上述导出协议并未指定导出类型,因此就以所修饰类作为其导出类型,即OracalLogger。相应的导入代码为:
[csharp] view plain copy
![](https://code.csdn.net/assets/CODE_ico.png)
[Import("Oracal")]
public OracalLogger OracalLogger { get; set; }
其中属性的类型是OracalLogger,而不是ILogger。如果类型为ILogger,导入就会失败。
只包含导出类型的导出:
[csharp] view plain copy
![](https://code.csdn.net/assets/CODE_ico.png)
[Export(typeof(ILogger))]
public class TxtLogger : ILogger
{
public void WriteLog(string message)
{
Console.WriteLine("Text Logger => {0}", message);
}
}
上述导出协议未指定导出协议名称,只指定了导出类型。则相应的导入代码为:
[csharp] view plain copy
![](https://code.csdn.net/assets/CODE_ico.png)
[Import(typeof(ILogger))]
public ILogger TextLogger { get; set; }
既不包含导出类型,也不包含导出协议名称的导出:
[csharp] view plain copy
![](https://code.csdn.net/assets/CODE_ico.png)
[Export]
public class XmlLogger : ILogger
{
public void WriteLog(string message)
{
Console.WriteLine("Xml Logger => {0}", message);
}
}
上述代码的导出协议名为默认协议,类型则与所修改的类相同,即XmlLogger,与之匹配的导入代码应该如下所示:
[csharp] view plain copy
![](https://code.csdn.net/assets/CODE_ico.png)
[Import]
public XmlLogger XmlLogger { get; set; }
务必确保导入属性XmlLogger的属性类型与导出特性修饰的类型保持一致,否则导入失败。
三、相关资源
1、MSDN官方资料:http://msdn.microsoft.com/zh-cn/library/dd460648(v=vs.110).aspx
相关文章推荐
- [MEF]第03篇 MEF延迟加载导出部件及元数据
- 【Qt】自定义样式之QSS
- 3求最大字串和
- CLion 破解方法
- 教您如何从ECSHOP整站中提取单独模板的方法
- NYOJ 27 水池数目(深搜)
- 昨天的一个披扣的问题处理到很晚没搞定的原因
- CodeForces 312C The Closest Pair(构造)
- CI框架 -- 核心文件 之 Benchmark.php
- 白书学习之隐式图搜索之八数码问题
- Scroller的工作原理概括
- [MEF]第01篇 MEF使用入门
- xpages不同数据库共享ssjs
- CentOS 6.5自动化运维之基于DHCP和TFTP服务的PXE自动化安装centos操作系统详解
- 欢迎使用CSDN-markdown编辑器
- CodeForces 312B Archer
- synchronized的应用
- CentOS 6.5自动化运维之基于DHCP和TFTP服务的PXE自动化安装centos操作系统详解
- 几个简单的算法
- scp 跨机远程拷贝