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

一、演示概述此演示介绍了MEF如何使用ImportMany特性同时导入多个与相同约束相匹配的导出部件,并且介绍了目录服务(Catalog),该服务告知MEF框架可以在什么地方去搜寻与指定约束匹配的导出部件,即导出部件位于什么地方。相关下载(屏幕录像、代码):访问密码 065d温馨提示:如果屏幕录像和代码不能正常下载,可站内留言,或发邮件到524130780@QQ.COM欢迎有兴趣研究.NET相关技术的网友加QQ群:18507443二、多部件导入ImportMany部件的导出设置不做任何改变,将导入地方做类似如下的修改:[ImportMany(typeof(ILogger))]public IEnumerable<ILogger> Loggers { get; set; }上述代码和单个部件的导入有两点区别:1、使用ImportMany特性,而不是Import特性。2、使用的是IEnumerable<T>类型来封装导入的部件。因为,导入的可能是多个部件,需要一种集合的方式来承载。导入元素做了如上的修改后,调用时只需要遍历即可访问每个导出部件。如下代码所示:static void Main(string[] args){Program program = new Program();program.Compose();foreach (ILogger logger in program.Loggers){logger.WriteLog("Hello World!");}Console.ReadLine();}三、目录服务(Catalog)在MEF中,,所谓的目录(Catalog)是不同于文件系统中的目录(Directory),而它的作用就是告知MEF框架可以在什么地方去查找导出部件,比如:AssemblyCatalog:在指定的程序集中查找导出部件。DirectoryCatalog:在指定的文件目录中查找导出部件,在构造函数中可传递文件目录,可以是绝对路径或相对路径。代码如下:/// <summary>/// 通过容器对象将宿主和部件组装到一起。/// </summary>public void Compose(){AggregateCatalog aggregateCatalog = new AggregateCatalog();AssemblyCatalog assemblyCatalog = new AssemblyCatalog(typeof(Program).Assembly);DirectoryCatalog directoryCatalog = new DirectoryCatalog("imps");aggregateCatalog.Catalogs.Add(assemblyCatalog);aggregateCatalog.Catalogs.Add(directoryCatalog);var container = new CompositionContainer(aggregateCatalog);container.ComposeParts(this);}上述代码中有一个AggregateCatalog的目录类,这是一个聚合目录,它可以将多个目录组织在一起,比如上列中的AssemblyCatalog和DirectoryCatalog。这样,MEF就会在多个地方去搜寻匹配的导出部件。四、相关资源1、MSDN官方资料:(v=vs.110).aspx

如果说对云南有进一步的了解的话就是鲜花。

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

相关文章:

你感兴趣的文章:

标签云: