MEF入门之不求甚解,但力求简单能讲明白(五)
我们已经成功的达到了目标,大量减少了if else。
不过在园子里面的文章大多,用的是Import、ImportMany。So,修改主函数。
using IPart; using System; using System.Collections.Generic; using System.ComponentModel.Composition; using System.ComponentModel.Composition.Hosting; using System.Linq;namespace meftest {class Program{[ImportMany]private IEnumerable<Lazy<IFileHandler, IPatMetadata>> fileHandlers;//警告,说没有赋值过。不用理会,MEF会自己导入的。static void Main(string[] args){//模拟数据。string[] files = new string[] {@"c:\xxoo\xxoo.txt",@"c:\xxoo\ooxx.doc",@"d:\测试目录\mm.jpg",@"e:\电影\天海翼.avi",};Program p = new Program();p.Compose();foreach (var file in files){string ext = System.IO.Path.GetExtension(file).ToLower();var export = p.fileHandlers.SingleOrDefault(o => o.Metadata.Extension == ext);//根据扩展名,也就是元数据来找到对应的处理实例if (export != null)export.Value.Process(file);}Console.ReadLine();}private void Compose(){//AssemblyCatalog 目录的一种,表示在程序集中搜索var assemblyCatalog = new AssemblyCatalog(typeof(Program).Assembly);//此处这一句实际上没啥用,因为此程序集下没有任何我们需要的实例(各种handler)//在某个目录下的dll中搜索。var directoryCatalog = new DirectoryCatalog(AppDomain.CurrentDomain.BaseDirectory, "*.dll");var aggregateCatalog = new AggregateCatalog(assemblyCatalog, directoryCatalog);//聚合目录包含有2种搜索方式var container = new CompositionContainer(aggregateCatalog);container.ComposeParts(this);//将部件组合在一起。意思就是将所有Export的部件,装配到this实例中标记为Import、ImportMany的属性上。 }} }
不过这里有一个要注意的地方,不能在主函数内部来进行装配。原因如下图。
运行结果:
ok,现在MEF你已经入门了,再看大神们的文章心里也有点底了。本系列到此结束。
转载于:https://www.cnblogs.com/luhuanong/p/5541581.html
MEF入门之不求甚解,但力求简单能讲明白(五)相关推荐
- MEF入门之不求甚解,但力求简单能讲明白(四)
上一篇我们已经可以获取各种FileHandler的实例和对应的元数据.本篇,我们做一个稍微完整的文件管理器. 1.修改接口IFileHandler,传入文件名 namespace IPart {pub ...
- C# MEF入门讲解
MEF入门之不求甚解,但力求简单能讲明白(一) 起因:工作需要针对不同类型的文件做不同的处理.打个比方,txt文件,直接打印,doc文件,直接发email,jpg文件,上传xxx相册站点. 其实这个问 ...
- WF4.0入门系列1——创建一个简单的工作流
WF4.0入门系列1--创建一个简单的工作流 打开VS2010,选择文件-新建-项目,选择Workflow项 工作流台应用程序,在名称处输入chapter01,选择合适的位置,这里默认,单击确定. V ...
- C语言中怎么用循环统计买法,C语言入门谭浩强版简单选择法冒泡法用数组和for循环进行学生成绩简单统计处理...
C语言入门谭浩强版 简单选择法排序 冒泡法排序 用数组和for循环进行学生成绩简单统计处理 例如:求个人平均分 学科平均分 单科最高分等 简单选择法 #include #define N 10 voi ...
- 【Yocto学习入门】02 - 构建一个简单的Poky参考嵌入式操作系统
[Yocto学习入门]02 - 构建一个简单的Poky参考嵌入式操作系统 一.开发环境准备 二.下载 Poky 代码 三.配置编译环境 3.1 下载失败情况处理 Failed to fetch URL ...
- 【深度学习入门基础】二、简单理解 Transformer
[深度学习入门基础]二.简单理解 Transformer 文章目录 [深度学习入门基础]二.简单理解 Transformer 自注意力层 多头注意力 Transformer 输入(输出)嵌入 位置编码 ...
- 【前端实例代码】Html5+css3创建拟物风格昏昏欲睡的云朵动画网页效果~前端开发网页设计基础入门教程~适合初学者~超简单~
b站视频演示效果: [前端实例代码]Html5+css3创建拟物风格昏昏欲睡的云朵动画网页效果!前端开发网页设计基础入门教程!适合初学者~超简单~ 效果图: 完整代码: <!DOCTYPE ht ...
- 编程语言用Python实现九九乘法表的几种方式,入门必备案例!超级简单!
编程语言用Python实现九九乘法表的几种方式,入门必备案例!超级简单! 我们在学习Python的过程中需要不断的积累和练习,这样才能够走的更远,今天一起来学习怎么用Python写九九乘法表~ 第一种 ...
- java etl工具_一文带你入门ETL工具-datax的简单使用
什么是ETL? ETL负责将分布的.异构数据源中的数据如关系数据.平面数据文件等抽取到临时中间层后进行清洗.转换.集成,最后加载到数据仓库或数据集市中,成为联机分析处理.数据挖掘的基础. ETL是数据 ...
最新文章
- 与有利集团总公司,同携手•共辉煌
- [C# 网络编程系列]专题十一:实现一个基于FTP协议的程序——文件上传下载器...
- iOS万能跳转界面的方法
- 如何用ABAP读取LRAW中的数据
- eclipse maven 构建简单springmvc项目
- web前端网页开发离不开的三要素:HTML、CSS、JavaScript
- PS如何制作酷炫个性字母人像海报
- php格式转为jpg格式,如何在PHP中将所有图像转换为JPG格式?
- mysql对所有id求积_MySQL学习笔记(二)—查询
- 真狠,为了干掉 HTTP ,Spring团队又开源nohttp了!
- python电力系统暂态分析_电力系统暂态计算——时域仿真方法
- 武汉晴川学院计算机,2019武汉晴川学院专业排名
- FYI | OHBM/Brain 会议投稿指北
- elementUI el-upload使用方法、上传限制数量且超出不显示上传按钮、删除闪一下、多个upload并排显示
- ARM开发工具历史及分类详解 (最详尽的区分和介绍ARM DS-5,RVD...
- scons构建mdk工程
- php 根据父级id查出,php,_三级分类 like查询 查询到很多id 需要找到对应的父级id 并根据父级id组合 应该怎么根据父级id将数据组合在一起呢?,php - phpStudy...
- 使用爬虫获取四川省各市的降雨量
- 游戏史上30位最有影响力的人
- JavaScript学习(十八)--鼠标事件(鼠标点击松开移动效果)