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

一、演示概述

此演示介绍了如何为Export指定导出的协议名和类型,以及如何为Import指定导入的协议名和类型,只有确保导出和导入的协议名和类型相匹配了,才能注入成功,否则注入就会失败。

相关下载(屏幕录像)http://yunpan.cn/cZIxLTJgGhpvp  访问密码 3b86

在线播放

温馨提示:如果屏幕录像和代码不能正常下载,可站内留言,或发邮件到[email protected]

欢迎有兴趣研究.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

时间: 2024-07-28 12:24:12

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

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

一.演示概述 此演示介绍了MEF如何使用ImportMany特性同时导入多个与相同约束相匹配的导出部件,并且介绍了目录服务(Catalog),该服务告知MEF框架可以在什么地方去搜寻与指定约束匹配的导出部件,即导出部件位于什么地方. 相关下载(屏幕录像.代码):http://yunpan.cn/cVdN5JHeQrJgI 访问密码 065d 温馨提示:如果屏幕录像和代码不能正常下载,可站内留言,或发邮件到[email protected] 欢迎有兴趣研究.NET相关技术的网友加QQ群:18507

[MEF]第01篇 MEF使用入门

一.演示概述 此演示初步介绍了MEF的基本使用,包括对MEF中的Export.Import和Catalog做了初步的介绍,并通过一个具体的Demo来展示MEF是如何实现高内聚.低耦合和高扩展性的软件架构.演示中,针对于IBookService接口,有3个不同版本的实现,分别是ComputerBookServiceImp.HistoryBookServiceImp和MathBookServiceImp,然后通过MEF的导入导出及组装机制,分别在这3个版本的实现间替换,而这种替换并未通过配置文件之类

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

一.演示概述 此演示介绍了MEF的延迟加载及元数据相关的内容. 在实际的设计开发中,存在着某些对象是不需要在系统运行或者附属对象初始化的时候进行实例化的, 只需要在使用到它的时候才会进行实例化,这种方式就可以理解为对象的迟延初始化,或者叫迟延加载. 对于提升系统的性能大有裨益呀! 另外,还可以为导出的部件添加元数据,以便在代码中提供更加灵活的扩展办法,或获取更多的相关信息.甚至,还可以自定义元数据的接口,无论是定义还是使用都非常的方便. 相关下载(屏幕录像):http://yunpan.cn/c

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

一.演示概述 本示例演示如何使用MEF提供的目录(Catalog)的扩展机制实现可过滤导出部件的自定义目录类.主要是通过继承ComposablePartCatalog基类,并实现接口INotifyComposablePartCatalogChanged来完成的. 相关下载(屏幕录像):http://yunpan.cn/cVkvuUNfuDtTX  访问密码 567d 温馨提示:如果屏幕录像和代码不能正常下载,可站内留言,或发邮件到[email protected] 欢迎有兴趣研究.NET相关技术

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

前面说完了导入和导出的几种方法,如果大家细心的话会注意到前面我们导出的都是类,那么方法和属性能不能导出呢???答案是肯定的,下面就来说下MEF是如何导出方法和属性的. 还是前面的代码,第二篇中已经提供了下载链接,大家可以下载学习. 首先来说导出属性,因为这个比较简单,和导出类差不多,先来看看代码,主要看我加注释的地方,MusicBook.cs中的代码如下: using System; using System.Collections.Generic; using System.Linq; usi

基于SSM的POI导入导出Excel实战第二篇-导出EXCEL

业务需求:这里我以产品信息为例,用于POI导入导出Excel实战的操作对象 需求分析:我们要导出的数据格式比较简单,其实就是待导出的表(视图)的数据,如下图所示: 实现思路:A.会发现待导出的数据列表是一个矩阵式的格式,即二维的形式 B.其中的头部id name unit price stock 等字段field是固定不变的,将会充当excel的头部 C.以数据行的角度观察数据列表,会发现每一行每一列的值都是B所指的那些字段一一对应的取值value D.由此可以得出这些数据组织是由每一行数据组成

基于SSM的POI导入导出Excel实战尾篇-其余功能实战(mvc三层开发模式体验)

业务需求:前几篇基本已经介绍完毕项目的核心功能,即POI导入导出Excel,为了整个项目的完整性,并让诸位童鞋体验体验企业级javaweb应用mvc三层模式的开发流程,本文将介绍一下项目的其余功能,包括搜索,新增,修改,删除 需求分析:作为程序员,在项目中经常接触的就是CRUD了,本篇博文将整合jquery-easyui框架(版本采用1.5.5.4)异步实现上述几个功能,给项目画上一个完整的句号!当然啦,在刚开始开发时,对于自己开发好的后端接口完全可以用Postman进行模拟(我就是这样做的),

基于SSM的POI导入导出Excel实战第一篇-SSM框架的整合

业务背景:在JavaWeb应用开发中,经常需要将应用系统中某些业务数据导出到Excel中,又或者需要将这些业务数据先收集到Excel然后一键导入到系统 业务需求:如何用Java实现导入导出Excel 需求分析:目前流行的Java导入导出Excel的框架有POI跟JXL,这两者的优缺点在这里我就不作比较了,感兴趣的童鞋可以自行搜索了解一下; 技术选型:从本文开始,我将分享一下如何基于SSM框架+POI实现Java应用导入导出Excel,数据库采用mysql5.6,应用服务器采用tomcat7 工具

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

最近工作上有一个任务要修改一个比较老的项目,分公司这边没有这个项目数据库相关的备份,所以需要从正式环境上面导出数据库备份出来在本地进行部署安装,之前在其它项目的时候也弄过这个数据库的部署和安装,也写了一个操作文档,但是写的不是那么的详细,很多场景都没有考虑到,后面想了想还是重新写一个操作文档方便下次数据库相关导出的操作,也同时能够帮助其它初次接触的同事快速操作. 项目的采用的开发相关是:Vs2008,Oracle 11g,PLSQL. 第一步,数据库的导出 a.数据库用户导出 1.查询所有数据库