zoukankan      html  css  js  c++  java
  • [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


    二、关键代码

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

    [csharp] view plain copy
     
     在CODE上查看代码片派生到我的代码片
    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的第一个参数是协议名称,第二个参数则是导出的类型。对应的导入代码如下:

    [csharp] view plain copy
     
     在CODE上查看代码片派生到我的代码片
    1. [Import("SQL", typeof(ILogger))]  
    2. public ILogger SqlLogger { get; set; }  


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

    [csharp] view plain copy
     
     在CODE上查看代码片派生到我的代码片
    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。相应的导入代码为:

    [csharp] view plain copy
     
     在CODE上查看代码片派生到我的代码片
    1. [Import("Oracal")]  
    2. public OracalLogger OracalLogger { get; set; }  

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


    只包含导出类型的导出:

    [csharp] view plain copy
     
     在CODE上查看代码片派生到我的代码片
    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. }  

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

    [csharp] view plain copy
     
     在CODE上查看代码片派生到我的代码片
    1. [Import(typeof(ILogger))]  
    2. public ILogger TextLogger { get; set; }  


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

    [csharp] view plain copy
     
     在CODE上查看代码片派生到我的代码片
    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,与之匹配的导入代码应该如下所示:

    [csharp] view plain copy
     
     在CODE上查看代码片派生到我的代码片
    1. [Import]  
    2. public XmlLogger XmlLogger { get; set; }  


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

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

  • 相关阅读:
    gtest ASSERT_TRUE和EXPECT_TRUE
    linux中文乱码
    [转]linux实时查看更新日志命令
    显示log里的ansi codecs颜色字符
    批量注释LOG
    Winrm远程命令/端口复用后门复现运用
    SSM整合Redis中的小记录
    从《MySQL蜜罐攻击反制微信ID》中的启发与复现
    CSharp插件编写-GetPwd密码获取器
    从pipePotato中学习Windows Access Token令牌模拟
  • 原文地址:https://www.cnblogs.com/ExMan/p/5487208.html
Copyright © 2011-2022 走看看