这篇文章的目的是简要分析对比MAF和MEF,并详细举出MEF设计中的细节和扩展上的细节,达到让读者能实际操作的目的。其中,MAF的设计会附上我的代码,其实就是官方的代码我自己手动联系了一遍,但还是很有收获的,不动手光看是不会体会到细节的;MEF是我着重介绍的,当然也是微软推荐的解决方案,所以这部分内容会多一些。
至于为什么要用MEF(插件框架)读者可针对自己的项目分析是否有必要使用。
文章中难免有不足和错误,还请大家不吝指出,互相交流。
MAF和MEF
MAF是微软集成在Framework3.5中的为解决插件化编程的框架,其优势是严谨但过于死板,开发速度慢;MEF是集成在Framework4.0中新增加的,潜在的目的是替换MAF的繁琐而使开发速度增快并且适合绝大多数的工作场景,增强易用性。
下面这篇博客的作者已经对此分析的很全面了,有兴趣的请参考:
http://www.cnblogs.com/techborther/archive/2012/02/06/2339877.html
接口契约
无论是MAF和MEF框架均需要一个中间引用集——“契约”,插一句题外话,契约在狭义上来讲就是C#中的接口Interface,在广义上将就是一种约束,几个“部件”依赖于同一个约定来互相配合、协同,这是人类社会互相协作的精神产物。这种协同思想在软件领域也是同样适用的,包括面向服务、面向接口设计、插件化设计、代码隔离等思想。
代码分析
首先,定义契约层:定义方法和数据接口,仅仅是声明接口
namespace Practise_MEF.Contract { public interface ICalculator { String Calculate(String input); } public interface IOperation { int Operate(int left, int right); } public interface IOperationData { Char Symbol { get; } } public interface IMultiOperation { int MultiOperate(Practise_MEF.Core.Module.InputParams p); } }