[MEF]第02篇 MEF的导入导出契约

一、演示概述此演示介绍了如何为Export指定导出的协议名和类型,以及如何为Import指定导入的协议名和类型,只有确保导出和导入的协议名和类型相匹配了,才能注入成功,否则注入就会失败。相关下载(屏幕录像): 访问密码 3b86在线播放:温馨提示:如果屏幕录像和代码不能正常下载,可站内留言,,或发邮件到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官方资料:(v=vs.110).aspx

你曾经说,等我们老的时候,

[MEF]第02篇 MEF的导入导出契约

相关文章:

你感兴趣的文章:

标签云: