MEF 基础简介 一

摘要:
单从名字我们不难发现MEF是专门致力于解决扩展性问题的框架。通过MEF,不仅可以在应用程序内重用扩展,还可以在应用程序之间重用扩展。也就是说,使用MEF是为了提高程序的可扩展性。MEF会根据指定的导入导出自动去发现匹配的扩展,不需要进行复杂的程序配置。使用MEF可以帮助我们减少内库之间的耦合。MEF用法MEF基础导入导出的使用:MEF的使用步骤主要分三步:宿主MEF并组合部件、标记对象的导出、对象的导入使用。

前言

小编菜鸟级别的程序员最近感慨颇多,经历了三五春秋深知程序路途遥远而我沧海一粟看不到的尽头到不了的终点何处是我停留的驿站。说了段废话下面进入正题吧!

什么是MEF?

MEF:全称Managed Extensibility Framework(托管可扩展框架)。单从名字我们不难发现MEF是专门致力于解决扩展性问题的框架。

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

也有人把MEF解释为“依赖注入”的一种方式,那么什么是“依赖注入”?

其实依赖注入就是我们日常所说的IOC/DI也就是IOC控制反转,DI依赖注入这俩是一个概念不同的角度理解的意思,当然了IOC被称为是一种思想并不是技术的实现而本章讲解的MEF属于IOC的一种大家可以吧IOC看作为一种编程“语言” 在编程语言中有很多的种类例如:C#,JAVA,C++等等。MEF就属于IOC中的一种,还有很多其他的实现方式大家可以自行百度去找相关素材。

了解MEF只需要抓住以下几个关键点:

(1)字面意思,可扩展的framework,或者叫可扩展的库。也就是说,使用MEF是为了提高程序的可扩展性。MEF会根据指定的导入导出自动去发现匹配的扩展,不需要进行复杂的程序配置。

(2)在设计层面上来说,为什么要使用MEF?为了“松耦合”!我们知道,程序设计有几个原则,“高内聚,低耦合”就是其中一个。使用MEF可以帮助我们减少内库之间的耦合。

MEF用法

(1)MEF基础导入导出的使用: MEF的使用步骤主要分三步:宿主MEF并组合部件、标记对象的导出、对象的导入使用。

IBookService内容如下:

    public interfaceIBookService
    {
        string BookName { get; set; }
        stringGetBookName();
    }

建立MusicBook继承自IBookService

    [Export(typeof(IBookService))]
    public classMusicBook : IBookService
    {
        public string BookName { get; set; }
        public stringGetBookName()
        {
            return "jhtBOOK";
        }
    }

建立测试类使用[Import]导入刚刚导出的MusicBook,下面的Compose方法,实例化CompositionContainer来实现组合,需引用:MEF 基础简介 一第1张

classProgram
{
    [Import]
    public IBookService Service { get; set; }
    static void Main(string[] args)
    {
        Program pro = newProgram();
        pro.Compose();
        if (pro.Service != null)
        {
            Console.WriteLine(pro.Service.GetBookName());
        }
        Console.Read();
    }
    private voidCompose()
    {
        //宿主MEF并组合部件
        var catalog = newAssemblyCatalog(Assembly.GetExecutingAssembly());
        CompositionContainer container = newCompositionContainer(catalog);
        //将部件(part)和宿主程序添加到组合容器
        container.ComposeParts(this);
    }
}

测试结果展现:

MEF 基础简介 一第2张

Composr:这个方法表示把当前Program这个类添加到组合容器,为什么要添加到组合容器?是因为只要添加到组合容器中之后,如果该类里面有Import,MEF才会自动去寻找对应的Export。这也就是为什么使用MEF前必须要组合部件的原因。大家也就可以吧IOC容器理解为一个键值对存在的集合初始化之后需要用到的对象自动到IOC容器中去寻找。

免责声明:文章转载自《MEF 基础简介 一》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇CodeSmith实用技巧(六):使用XML 属性MySQL结果集 数据查询(重点)下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

实战MEF(5):导出元数据

如何理解元数 我们可以把元数据理解为随类型一起导出的附加信息。有时候我们会考虑,把元数据随类型一并导出,增加一些说明,使得我们在导入的时候,可以多一些筛选条件。 默认的类型导出带有元数据吗 上面的内容我说得比较简洁,也许您不是很理解,不要紧,在编程里面,很多东西我们都是写了代码后才理解的。所以,我的理论功底比较差,最不擅长的就是长篇大论,还是从代码中看吧。...

MAF架构与MEF架构研究

1.MAF架构   1)  优点     a)      可靠。使用单独应用域进行隔离,加载卸载均在各自独立域内进行。     b)      多版本支持。修改接口即可,向后支持。     c)      支持第三方插件。   2)  缺点     a)         复杂。6层协议。     b)         加载耗时。需要进行管线构建,序列化和反...

重构笔记---MEF框架(下)

概述 上一篇介绍了MEF的一个很简单很基本的应用,实现了MEF框架并展示了MEF框架的一些基本的要求和设置,这些基础知识很重要,接下来我们分析一下如何扩展或增强MEF框架内容。 增强的Contract类库 其实有了上篇的介绍,读者很快会发现,Contract类库制约性很强,或者说“它”只引用了windows自带的System.XXX类型的公共类库,而往往在...

重构笔记---MEF框架(上)

概述 这篇文章的目的是简要分析对比MAF和MEF,并详细举出MEF设计中的细节和扩展上的细节,达到让读者能实际操作的目的。其中,MAF的设计会附上我的代码,其实就是官方的代码我自己手动联系了一遍,但还是很有收获的,不动手光看是不会体会到细节的;MEF是我着重介绍的,当然也是微软推荐的解决方案,所以这部分内容会多一些。 至于为什么要用MEF(插件框架)读者可...