文档章节

MEF初步使用

我只是一只小小鸟
 我只是一只小小鸟
发布于 2016/02/17 09:21
字数 543
阅读 41
收藏 0
点赞 1
评论 0

            MEF(Managed Extensibility Framework)是一个用于创建可扩展的轻型应用程序的库。 应用程序开发人员可利用该库发现并使用扩展,而无需进行配置。 扩展开发人员还可以利用该库轻松地封装代码,避免生成脆弱的硬依赖项。 通过 MEF,不仅可以在应用程序内重用扩展,还可以在应用程序之间重用扩展。(摘自MSDN)

            我初步使用后的感受是通过这个应用程序库,我们可以实现接口功能的扩展和自动导入到实例,不需要自己编码对接口进行实现。它可以在指定的程序集中搜索匹配合适的接口实现,然后导入使用。

弄了一个控制台程序,代码不多,很简单,我就直接上代码了。看完了应该会有一个初步认知。

文件一:program.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.ComponentModel.Composition;
using System.ComponentModel.Composition.Hosting;
using System.Reflection;
namespace MEFdemo
{
    class Program
    {

        public IbookService book { get; set; }
        public IFoodService Food { get; set; }
        public CompositionContainer container { get; set; }
        static void Main(string[] args)
        {
            Program pro = new Program();
            pro.Compose();
            pro.book = pro.container.GetExportedValueOrDefault<IbookService>("musicbook");
            Console.WriteLine(pro.book.GetBookName());
            pro.book = pro.container.GetExportedValueOrDefault<IbookService>("historybook");
            Console.WriteLine(pro.book.GetBookName());
            pro.Food = pro.container.GetExportedValueOrDefault<IFoodService>("musicbook");
            if (pro.Food == null)
                pro.Food = pro.container.GetExportedValue<IFoodService>();//GetExportedValue与GetExportedValueOrDefault的区别
                                                                          // 在于后者找不到匹配度的,会异常报错
            Console.WriteLine(pro.Food.GetFoodName());
            Console.WriteLine("当前程序集路径:" + Assembly.GetExecutingAssembly().Location);
            Console.Read();
        }
        /// <summary>
        /// 构造好组合容器
        /// </summary>
        private void Compose()
        {
            var catalog = new AssemblyCatalog(Assembly.GetExecutingAssembly());//指定程序集目录
            container = new CompositionContainer(catalog);//设定部件容器为该目录下
        }

    }
}

文件二:initalInterFace.cs

using System;
using System.Collections.Generic;
using System.ComponentModel.Composition;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace MEFdemo
{
    public interface IbookService
    {
        string BookName { get; set; }
        string GetBookName();
    }
    public interface IFoodService
    {
        string FoodName { get; set; }
        string GetFoodName();
    }
    [Export("musicbook", typeof(IbookService))]
    public class MusicBook : IbookService
    {
        public string BookName { get; set; }
        public string GetBookName()
        {
            return "MusicBook";
        }
    }
    [Export("historybook", typeof(IbookService))]
    public class HistoryBook : IbookService
    {
        public string BookName { get; set; }
        public string GetBookName()
        {
            return "HistoryBook";
        }
    }
    [Export("musicbook", typeof(IFoodService))]
    public class apple:IFoodService{
        public string FoodName { get; set; }
        public string GetFoodName()
        {
            return "苹果";
        }
    }
}

其实上面的代码,展示了如何使用Export导出实现后的接口,已经取相同名字不同接口,不同名字相同接口的实现情况。

有兴趣的可以耐心看看。

运行结果如下:

 

© 著作权归作者所有

共有 人打赏支持
我只是一只小小鸟
粉丝 14
博文 98
码字总数 52982
作品 1
荆州
程序员
C#可扩展编程之MEF学习笔记(一):MEF简介及简单的Demo

  在文章开始之前,首先简单介绍一下什么是MEF,MEF,全称Managed Extensibility Framework(托管可扩展框架)。单从名字我们不难发现:MEF是专门致力于解决扩展性问题的框架,MSDN中对MEF...

雲霏霏 ⋅ 2014/08/19 ⋅ 0

MEF学习笔记

MEF是 Managed Extensibility Framework简称,在计算机的世界什么都会加一个简称,这我们大家已经司空见惯了。从名字我们可以知道它是一个用于管理的可扩展性框架。这是和EL不同的另一种IOC...

zting科技 ⋅ 2017/01/10 ⋅ 0

.Net4下的MEF(Managed Extensibility Framework) 架构简介

阅读: 1279 评论: 4 作者: 周 金根 发表于 2010-05-26 21:08 原文链接 在上篇WPF -.Net 4.0解决了DataGrid分组时的内存泄露中说过由于内存泄露问题,OpenExpressApp升级到.Net4平台,然后升...

zhoujg ⋅ 2010/06/02 ⋅ 0

C#可扩展编程之MEF学习笔记(五):MEF高级进阶

好久没有写博客了,今天抽空继续写MEF系列的文章。有园友提出这种系列的文章要做个目录,看起来方便,所以就抽空做了一个,放到每篇文章的最后。 前面四篇讲了MEF的基础知识,学完了前四篇,...

雲霏霏 ⋅ 2014/09/24 ⋅ 0

(2)从实际项目谈起,基于MEF的插件框架之总体设计

文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/。 1.MEF框架简介 MEF的全称是Managed Extensibility Framework(MEF),其是.net4.0的组成...

李晓晖 ⋅ 2014/08/06 ⋅ 0

C#可扩展编程之MEF学习笔记(四):见证奇迹的时刻

  前面三篇讲了MEF的基础和基本到导入导出方法,下面就是见证MEF真正魅力所在的时刻。如果没有看过前面的文章,请到我的博客首页查看。   前面我们都是在一个项目中写了一个类来测试的,...

雲霏霏 ⋅ 2014/08/28 ⋅ 0

C#可扩展编程之MEF学习笔记(二):MEF的导出(Export)和导入(Import)

  上一篇学习完了MEF的基础知识,编写了一个简单的DEMO,接下来接着上篇的内容继续学习,如果没有看过上一篇的内容, 请阅读:http://www.cnblogs.com/yunfeifei/p/3922668.html。   下面...

雲霏霏 ⋅ 2014/08/19 ⋅ 0

信息系统开发平台OpenExpressApp - 发布for .Net4版本

OpenExpressApp是将现有技术和产品中有价值的部分引入到一起,它要做的是整合别人已经实践的方法来提高我们自身的开发能力。不同于以 往为特定开发角色提供独立的开发工具和框架,它基于业务...

zhoujg ⋅ 2010/05/30 ⋅ 0

Oracle发布OSS suite新版本,适应开放的新环境

运营支撑系统(OSS)市场正在面临一些重大的变化,原因在于开放的软件定义网络(SDN)和网络功能虚拟化(NFV)技术对OSS专有模型施加了压力,包括Oracle在内的一些较大的OSS供应商已经开始采取...

SDN_LAB ⋅ 2015/08/06 ⋅ 0

Autofac正式发布2.1版,IoC依赖注入容器

经过了2年多的开发,设计和试验,Autofac发布了第二版,针对1.4版本进行了重组,提供了更好的开发体验,你可以到这里下载正式的版本。 2.1版本也带来许 多新特性: 组件发现:Autofac 2可以从...

红薯 ⋅ 2010/04/26 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

那些证书相关的玩意儿(SSL,X.509,PEM,DER,CRT,CER,KEY,CSR,P12等)

之前没接触过证书加密的话,对证书相关的这些概念真是感觉挺棘手的,因为一下子来了一大堆新名词,看起来像是另一个领域的东西,而不是我们所熟悉的编程领域的那些东西,起码我个人感觉如此,且很长...

颖辉小居 ⋅ 15分钟前 ⋅ 0

利用有限制通配符提升API灵活性(28)

1、参数化类型是不可变的 List<String> 不是List<Object>的子类,但是二者是有联系的 利用有限制的通配符类型处理类似情况 List<? extends Object>(生产者) Collection<? super E>(消费者......

职业搬砖20年 ⋅ 21分钟前 ⋅ 0

ssm框架 +bootstrap分页

这里有两种方式 方式一:自己写分页 方式二:使用插件PageHelper 1.自己写分页 1.1 效果 1.2 实现过程 1.2.1 创建分页公共类 //---------------------------1.属性-------------------------...

Lucky_Me ⋅ 28分钟前 ⋅ 0

Istio

helm template install/kubernetes/helm/istio --name istio --namespace istio-system > $HOME/istio.yaml after $ kubectl create namespace istio-system$ kubectl create -f $HOME/ist......

openthings ⋅ 28分钟前 ⋅ 0

内核线程、轻量级进程、用户线程

线程与进程概念 在现代操作系统中,进程支持多线程。 进程是资源管理的最小单元; 线程是程序执行的最小单元。 即线程作为调度和分配的基本单位,进程作为资源分配的基本单位 一个进程的组成...

117 ⋅ 33分钟前 ⋅ 0

elasticsearch2.4.6升级为elasticsearch-5.5.0的经历

将elasticsearch-5.5.0 中的配置 path.data 指向原来的数据路径 即 path.data: /usr/local/src/elasticsearch-2.4.6/data 注意: elasticsearch-5.5.0 需要将jdk版本升级到1.8...

晨猫 ⋅ 34分钟前 ⋅ 1

lvm讲解 磁盘故障小案例

1

oschina130111 ⋅ 38分钟前 ⋅ 0

那些提升开发人员工作效率的在线工具

本文转载自公众号 Hollis 作为一个Java开发人员,经常要和各种各样的工具打交道,除了我们常用的IDE工具以外,其实还有很多工具是我们在日常开发及学习过程中要经常使用到的。 Hollis偏爱使用...

时刻在奔跑 ⋅ 50分钟前 ⋅ 0

restful风格 实现DELETE PUT请求 的web.xml的配置

import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframe......

泉天下 ⋅ 56分钟前 ⋅ 0

Shell数组

Shell数组 Shell在编程方面比Windows批处理强大很多,无论是在循环、运算。 bash支持一维数组(不支持多维数组),并且没有限定数组的大小。类似与C语言,数组元素的下标由0开始编号。获取数...

蜗牛奔跑 ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部