基于MEF的插件框架之总体设计

1.MEF框架简介

MEF的全称是Managed Extensibility Framework(MEF),其是.net4.0的组成部分,在3.5上也可以使用。熟悉java中的spring框架的人,对这个框架中涉及的几个概念应该会比较容易理解。

这里我先把我两年多前的一个完整的利用MEF搭建的插件式系统中涉及到的MEF框架里的几个基本概念大致描述下。

1.1 依赖注入(export、import)

MEF框架中提供 import和export功能,即注入和导出。Spring中有依赖注入这个概念,这里的这个概念也是大同小异,即将某个对象实例化后,注入到依赖这个实例的对象中,如此可以降低类之间的耦合。同样,与spring中的注入类似,MEF也有延迟注入这个概念,普通的依赖注入在整个程序开始运行时便进行了注入,而这种延迟注入可以做到只有当对象需要被使用时才进行注入。

1.2约定(Contracts)

约定是与依赖注入相辅相成的。依赖注入最大的好处就是类与类之间解耦,但是如何知道到底是将一个类注入到另外一个类中呢,这里就需要约定这个概念了。既需要注入的类并不用直接引用对方的类,而是两者通过一个共同的接口(也可以是类等其他),此接口即为约定,从而进行导出和注入。

1.3 目录和组件容器(catalog、compositionContainer)

我们用spring时,针对不同的应用,我们只需要启动applicationContext或者WebApplicationContext将配置加载到IOC容器中,根据XML配置或者注记便可以实现类的依赖注入。在MEF框架中,这种IOC容器需要代码来进行实现,并且配置一般通过注记的方式。

这里涉及到两个概念,分别是catalog和compositionContainer。catalog中将所有需要组装到IOC容器中的类集中到一起,然后再将catalog放入到componentContainer中,这样我们的IOC容器便拥有了所有的需要进行控制的类。但是仅仅放入后,也并不能让容器进行自动的依赖注入,它还需要我们进行ComposeExportedValue和SatisfyImportsOnce这样的操作,才能真正的完成依赖注入的全过程。

1.4 MEF框架图

2.系统设计

我这里先把两年前的那个项目的内容大致描述下。该项目为一个影像处理全自动化的项目,分为影像的自动化接收,利用Platform进行并行化预处理,然后再利用此平台对影像进行冰凌、干旱、洪涝的分析处理,最后生成产品后发布和入库。当时是由几个大学和一个单位一起合作完成的,哪几个大学就不说了。我只是这些众多参与人中的一个,不过我不是像他们做遥感用envi的DLL语言处理影像的,也不是他们用Platform做并行计算的,也不是那些后台做产品发布和入库的。我做的主要是下面这个需求。

2.1需求

(1)将每天接受的原始影像展现在前台,尽量以合理的美观的方式展现。

(2)提供影像的查询功能,包括时间空间等查询。

(3)提供影像的下载功能。

(4)提供日志的查询功能。

(5)提供对服务器的监听功能。

(6)将手动处理完的成果进行管理和展示。

(7)提供对手动处理完的数据进行元数据注册。

(8)能将自动化中的各个模块提炼成手动也能辅助进行的模块,并且可以集成到系统中。

2.2需求分析

看了需求后,我第一个感觉就是这个系统得做出插件式系统,最后我选定了MEF。既然决定了要做插件式系统,那么就得把需求分一个类,及哪些是宿主程序本身有的,哪些是该做成插件。显而易见,需求中的(1)到(6)都可以做在宿主程序中。而(7)和(8)的话,都是单独的插件模块,因为这(7)和(8)的功能都是提取自自动化流程中的,由各个不同的人员完成,我这里只需要提供他们统一的接口以及需要的调用方式就可以由他们自身做成插件了。而且以后可能会将更多的自动化流程提取出来,都做成插件后,方便扩展。

2.3 技术分析

这里主要讲针对插件系统的技术需求。

(1)能够将插件插入到相应的地方,比如是工具栏呢还是左侧选择栏等。

(2)点击插件所在的按钮后,插件能弹出。这里需要的是单例模式。

(3)插件能和宿主通讯,比如插件完成了某项功能,需要通知宿主该功能已经完成。

(4)插件和插件之间也要能通讯,比如一个插件完成了某个功能后,能将得出的参数显示在另外一个插件上。

3.插件框架的设计图

下一节,插件框架的通信机制的实现中,我会首先讲下这个框架实现中的核心部分。在下下讲中我们再讲整个框架的依赖注入和界面实现。

 

基于MEF的插件框架之总体设计的更多相关文章

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

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

  2. 基于Proxy思想的Android插件框架

    意义 研究插件框架的意义在于下面几点: 减小安装包的体积,通过网络选择性地进行插件下发 模块化升级.减小网络流量 静默升级,用户无感知情况下进行升级 解决低版本号机型方法数超限导致无法安装的问题 代码 ...

  3. [连载]《C#通讯(串口和网络)框架的设计与实现》-2.框架的总体设计

    目       录 C#通讯(串口和网络)框架的设计与实现... 1 (SuperIO)- 框架的总体设计... 1 第二章           框架总体的设计... 2 2.1           ...

  4. .Net中的插件框架Managed Extensibility Framework

    Managed Extensibility Framework(MEF)是微软的一个用来扩展.NET应用程序的框架,它最初为了满足Visual Studio里的编辑器的需求,比如说,延迟加载所有东西和 ...

  5. 分享在Linux下使用OSGi.NET插件框架快速实现一个分布式服务集群的方法

    在这篇文章我分享了如何使用分层与模块化的方法来设计一个分布式服务集群.这个分布式服务集群是基于DynamicProxy.WCF和OSGi.NET插件框架实现的.我将从设计思路.目标和实现三方面来描述. ...

  6. 8个强大的基于Bootstrap的CSS框架

    做过前端开发的小伙伴们应该对Bootstrap不会陌生,它是由Twitter推出的开源CSS框架,其中包含了很多Web前端开发的工具包和应用组件.当然,和jQuery一样,Bootstrap同时也是一 ...

  7. 在VC6中基于dll开发插件用于各种图片显示(BMP/TGA/JPG/GIF/PNG/TIF/ICO/WMF/EMF/...)

    一.图片显示 图片显示的方法: 1.  直接写程序 2.  第3方库 3.  调用COM组件的IPicture接口 4.  使用MFC的CPictureHolder类 5.  使用GDI+的CImag ...

  8. [转]C/C++:构建你自己的插件框架

    本文译自Gigi Sayfan在DDJ上的专栏文章.Gigi Sayfan是北加州的一个程序员,email:gigi@gmail.com. 本文是一系列讨论架构.开发和部署C/C++跨平台插件框架的文 ...

  9. 在ASP.NET MVC应用中开发插件框架(中英对照)

    [原文] Developing a plugin framework in ASP.NET MVC with medium trust [译文] 在ASP.NET MVC应用中开发一个插件框架 I’v ...

随机推荐

  1. CentOS7 安装zookeeper

    本章介绍CentOS的初始配置与zookeeper的安装. www.apache.org/dist/上可以下载Hadoop整个生态环境的组件,我下的Zookeeper3.4.6版本 我一般都是在一个虚 ...

  2. 使用Enterprise Architecture绘制10种UML画画

    UML绘制10种课程要求UML画画,选Enterprise Architecture作为一个绘图工具,每一个草图必须是网上找教程,我觉得很麻烦,还有一些数字并没有找到详细的教程.在我自己找一个绘图方法 ...

  3. 微信JS-SDK使用权限签名算法的服务端实现(.net版本)

    原文:微信JS-SDK使用权限签名算法的服务端实现(.net版本) 一.概要 微信此次开放JS接口,开放了一大批api权限,即使在未认证的订阅号也可以使用图像接口,音频接口,智能接口,地理位置,界面操 ...

  4. hdu 4115 石头剪子布(2-sat问题)

    /* 意甲冠军:石头剪子布,目前已知n周围bob会有什么,对alice限制.供u,v,w:设w=0说明a,b回合必须出的一样 否则,必须不一样.alice假设输一回合就输了,否则就赢了 解: 2-sa ...

  5. Javascript学习5 - 函数

    原文:Javascript学习5 - 函数 在Javascript中,函数和对象是交织在一起的.有些函数的特性与对象相关联.这一点的内容在第六部分会讨论到. 这一部分主要讨论函数与其它比较熟悉的语言( ...

  6. win8 64位使用plsql developer连接oracle数据库问题

    问题:win8的64使用位系统plsql developer本地连接oracle莫名其妙的问题发生在数据库时.错误消息框,甚至可能是空的. 原因:它表示,互联网,的原因,预计在64位系统安装在64位O ...

  7. ABP依赖注入

    ABP依赖注入 点这里进入ABP系列文章总目录 基于DDD的现代ASP.NET开发框架--ABP系列之6.ABP依赖注入 ABP是“ASP.NET Boilerplate Project (ASP.N ...

  8. javascript的语法作用域你真的懂了吗

    原文:javascript的语法作用域你真的懂了吗 有段时间没有更新了,思绪一下子有点转不过来.正应了一句古话“一天不读书,无人看得出:一周不读书,开始会爆粗:一月不读书,智商输给猪.”.再加上周五晚 ...

  9. hdu4324 Triangle LOVE (拓扑排序)

    这是一道最简单的拓扑排序题,好久没看这个算法了! 有点生疏了! 后附上百度的资料; #include<stdio.h> #include<string.h> int in[50 ...

  10. 【iOS】Xib的使用与File&#39;Owner总结

    一.XIB的适用范围 xib(也叫Nib)与storyboard一样是用来描写叙述界面的. storyboard描写叙述的是比較大型的,大范围.适合描写叙述界面跳转等. 二.XIB的使用 Xib是小范 ...