概述

上一篇介绍了MEF的一个很简单很基本的应用,实现了MEF框架并展示了MEF框架的一些基本的要求和设置,这些基础知识很重要,接下来我们分析一下如何扩展或增强MEF框架内容。

增强的Contract类库

其实有了上篇的介绍,读者很快会发现,Contract类库制约性很强,或者说“它”只引用了windows自带的System.XXX类型的公共类库,而往往在协议中我们是要引用我们实际项目工程中的方法和成员,这样就导致了要依赖一个非系统的公共类库,例如Practise_MEF.Core。那能否还能实现,我的插件仅仅生成一个“类库DLL”呢?

首先我们来看一下依赖性图解:

这里所有项目工程都将依赖于Core,这其中Practise_MEF和Practise_MEF.contract是直接引用(Copy Local = true),Practise_MEF.Plugin.MultiCalculateEx是间接引用(Copy Local = false),这里CalculateEx这个项目没有引用Core,如果引用的话也为间接引用。扩展库通过间接引用后将不产生或复制Core.DLL,而是依赖于宿主(一般指调用扩展类库的UI类库,这里是Practise_MEF),这样插件类库只会产生本身类库的DLL而不会产生引用的DLL,至少看起来比较工整。

项目重构

有了上面这些技术上的铺垫,我们就为重构为MEF架构的软件提供了一条光明的道路。然而,道路永远是曲折的。

首先,既然框架式基于协议的,那就得分析要重构的项目中哪些是公共的属性、方法,以便提取出接口,这是至关重要的,如果没有共性,那重构本身的意义并不是很大。

在整理、提取项目核心类库的过程中,我认为一下几个方面值得提出到Core中:

  1. BaseForm
  2. 基础的Module/Entity/Objects
  3. 接口Interface
  4. 枚举Enum
  5. 委托Delegate
  6. 工具类Utility
  7. 基础方法Fucntion

。。。

其它,业务逻辑、非基础方法则提取到BLL等上层模块中。

Docker框架

在Winform下推荐WeifenLuo的DockPanel插件,这个插件实现起来简单方便、功能强大,可以将插件的Form作为Docker的一个子集加入其中,布局上类似于Visual Studio 编辑器。

介绍WeifenLuo:

http://www.cnblogs.com/wuhuacong/archive/2009/07/09/1520082.html

总结

有了以上三个方面的积累,使得重构成为MEF插件框架成为可能。

由于此项目尚在开中,故相关代码不宜公开。

重构笔记---MEF框架(下)的更多相关文章

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

    概述 这篇文章的目的是简要分析对比MAF和MEF,并详细举出MEF设计中的细节和扩展上的细节,达到让读者能实际操作的目的.其中,MAF的设计会附上我的代码,其实就是官方的代码我自己手动联系了一遍,但还 ...

  2. 【工作笔记二】ASP.NET MVC框架下使用MVVM模式

    ASP.NET MVC框架下使用MVVM模式 原文:http://www.cnblogs.com/n-pei/archive/2011/07/21/2113022.html 对于asp.net mvc ...

  3. C#面试题(转载) SQL Server 数据库基础笔记分享(下) SQL Server 数据库基础笔记分享(上) Asp.Net MVC4中的全局过滤器 C#语法——泛型的多种应用

    C#面试题(转载) 原文地址:100道C#面试题(.net开发人员必备)  https://blog.csdn.net/u013519551/article/details/51220841 1. . ...

  4. SpringMVC笔记——SSM框架搭建简单实例

    落叶枫桥 博客园 首页 新随笔 联系 订阅 管理 SpringMVC笔记——SSM框架搭建简单实例 简介 Spring+SpringMVC+MyBatis框架(SSM)是比较热门的中小型企业级项目开发 ...

  5. 深入剖析 RabbitMQ —— Spring 框架下实现 AMQP 高级消息队列协议

    前言 消息队列在现今数据量超大,并发量超高的系统中是十分常用的.本文将会对现时最常用到的几款消息队列框架 ActiveMQ.RabbitMQ.Kafka 进行分析对比.详细介绍 RabbitMQ 在 ...

  6. 管中窥豹——框架下的SQL注入 Java篇

    管中窥豹--框架下的SQL注入 Java篇 背景 SQL注入漏洞应该算是很有年代感的漏洞了,但是现在依然活跃在各大漏洞榜单中,究其原因还是数据和代码的问题. SQL 语句在DBMS系统中作为表达式被解 ...

  7. 【山外笔记-工具框架】iperf3网络性能测试工具详解教程

    [山外笔记-工具框架]iperf3网络性能测试工具详解教程   本文下载链接 [学习笔记]iperf3网络性能测试工具.pdf 网络性能评估主要是监测网络带宽的使用率,将网络带宽利用最大化是保证网络性 ...

  8. Foundation框架下的常用类:NSNumber、NSDate、NSCalendar、NSDateFormatter、NSNull、NSKeyedArchiver

    ========================== Foundation框架下的常用类 ========================== 一.[NSNumber] [注]像int.float.c ...

  9. 在Thinkphp3.2.3框架下实现自动获取客户端IP地址的get_client_ip()函数

    在Thinkphp框架下使用get_client_ip()函数获取客户端IP地址十分方便: 一行代码便可以实现:$ip = get_client_ip(); 但当我们测试时会遇到后台获取的IP地址显示 ...

随机推荐

  1. 迅为三星Exynos 4412开发板四核Cortex-A9ARM安卓linux开发板

    开发板光盘资料包含:原理图(PDF格式).底板PCB(Allegro格式).驱动程序源码.芯片和LCD数据手册.开发环境.产品使用手册. 4412开发板简介: iTOP-Exynos4412开发板采用 ...

  2. NOIP2008提高组火柴棒等式(模拟)——yhx

    题目描述 给你n根火柴棍,你可以拼出多少个形如“A+B=C”的等式?等式中的A.B.C是用火柴棍拼出的整数(若该数非零,则最高位不能是0).用火柴棍拼数字0-9的拼法如图所示: 注意: 加号与等号各自 ...

  3. selenium依次点击页面的删除按钮

    需要依次点击页面的删除按钮,如下图: @Test public static void FaBu() { TestMenuJump.jumpExam(driver); TestMenuJump.jum ...

  4. UIView.frame的骗局

    如果你刚刚开始接触IOS编程, 刚刚接触UIKit, 肯定会被 frame, bounds, center, layer.anchorPoint, layer.position 这些乱七八糟得属性折腾 ...

  5. 边工作边刷题:70天一遍leetcode: day 84-3

    Meeting Rooms I/II 要点:这题和skyline类似,利用了interval start有序的特点,从左向右处理,用一个heap来动态表示当前占用rooms的时间段,所以heap的si ...

  6. css reset重置样式有那么重要吗?

    在以前写html代码的时候,一般都会在head里添加重置样式reset.css,其内容如下: @charset "utf-8"; html, body, div, span, ap ...

  7. ORACLE中创建和删除临时表

    CREATE GLOBAL TEMPORARY TABLE TABLENAME (   COL1  VARCHAR2(10),   COL2  NUMBER) ON COMMIT PRESERVE(D ...

  8. 使用PDO进行sql的预处理和操作结果集

  9. f2fs解析(一)f2fs如何解决wandering tree

    wandering tree问题是log-structured 文件系统(LFS) 特有的一个问题,因为LFS的脏数据是追加更新的,所以如果一个数据块变脏了,那么那个数据块的直接索引块.间接索引块都会 ...

  10. 理解SQL Server中的权限体系(下)----安全对象和权限

    原文:http://www.cnblogs.com/CareySon/archive/2012/04/12/SQL-Security-SecurableAndPermission.html 在开始阅读 ...