zoukankan      html  css  js  c++  java
  • NET 自带IOC容器MEF指初体验

    转自:http://www.cnblogs.com/ulex/p/4186881.html

    IOC容器:工具较多,大体功能都相同,大都需要事先对接口与实现进行配对(通过代码或配置文件),然后由系统自动或手动通过接口来获得相应实现类的实例,对象实例化的工作由IOC容器自动完成。

    概述:MEF :Managed Extensibility Framework(MEF)是.NET平台下的一个扩展性管理框架,他是一系列特性的集合,包括依赖注入等。

    解决的问题:

    1.MEF为宿主应用提供了一种标准的途径来暴露自身并使用外部扩展。

    2.而扩展本身是可以被不同的应用程序所使用的。、

    3.而一个扩展依旧可以通过针对特定应用的方法来实现。扩展之间也可以存在依赖关系,MEF则会自动将它们按照正确的顺序进行调用。

    工作原理:

    MEF的核心包括一个catalog 和一个CompositionContainer. catalog用于发现扩展,而container 用于协调创建和梳理依赖性。每个可组合的Part提供了一个或多个Export,并且通常依赖于一个或多个外部提供的服务或Import。

    每个Part管理一个实例为应用程序运行。

    MEF 提供一种通过“组合”隐式发现组件的方法。 MEF 组件(称为“部件-Part”)。部件以声明方式同时指定其依赖项(称为“导入-Import”)及其提供的功能(称为“导出-Export”)。MEF 原理上很简单,找出有共同接口的导入、导出。然后找到把导出的实例化,赋给导入。说到底MEF就是找到合适的类实例化,把它交给导入。

    如何声明一个部件-导入与导出

    导出是部件向容器中的其他部件提供的一个值,而“导入”是部件向要通过可用导出满足的容器提出的要求。

    在特性化编程模型中,导入和导出是由修饰类或成员使用 Import 和Export 特性声明的。

    ExPort特性类、字段、属性或方法,而 Import 特性可修饰字段、属性或构造函数参数。为了使导入与导出匹配,导入和导出必须具有相同的协定。

    例子:

    假设有一个类MyClass,它声明了可以导入插件的类型是IMyAddin。

    public class MyClass
    {
        [Import]
        public IMyAddin MyAddin { get; set; }
    }
    这里有一个类,它声明为导出。类型同样为IMyAddin
    [Export(typeof(IMyAddin))]
    public class MyLogger : IMyAddin { }

    这样我们使用MyAddin属性的时候就可以获得到MyLogger的实例。

    发现部件

      MEF提供三种方式发现部件

    • AssemblyCatalog 在当前程序集发现部件。
    • DirectoryCatalog 在指定的目录发现部件。
    • DeploymentCatalog 在指定的XAP文件中发现部件(用于silverlight)

    当通过不同方式发现部件的时候,还可以使用AggregateCatalog来把这些部件聚合到一起。

    复制代码
    var catalog = new AggregateCatalog();
                //把从Program所在程序集中发现的部件添加到目录中
                catalog.Catalogs.Add(new AssemblyCatalog(typeof(Program).Assembly));
                //把从指定path发现的部件添加到目录中
                catalog.Catalogs.Add(new DirectoryCatalog("C:\Users\v-rizhou\SimpleCalculator\Extensions"));
    复制代码
     
     
  • 相关阅读:
    优秀的云架构师需要学什么技能
    dkh人力资源大数据解决方案整体架构
    大数据hadoop与spark的区别
    hadoop技术入门学习之发行版选择
    大数据开发基础知识需要掌握哪些
    智慧人社政务云平台建设方案架构案例介绍
    [项目机会]citrix 虚拟桌面对于java等高CPU占用率如何解决
    [办公自动化]无法使用江南天安usbkey 无法使用视频网站
    [学习笔记]从0到1
    [办公自动化]目录修改以及插入分页符后行间距自动变宽
  • 原文地址:https://www.cnblogs.com/xuezhi/p/5013151.html
Copyright © 2011-2022 走看看