MEF使用注意事项

    最近开始接触并在项目中使用MEF(关于MEF的介绍和基础知识可以搜索园子里面其他的文章),在使用过程中碰到了一些问题和感想,现分享如下:

  1. MEF的使用范围。刚开始接触MEF的时候,第一感觉是MEF真是太棒了,以前接触过的什么Spring.Net啊,Unity啊之类的IOC框架,完全可以用MEF来实现,可真正实践的时候,好像还是替代不了。个人的理解是MEF是根据导入(Import)、导出(Export)特性使用自动化的方式组装部件。
  2. 自动装配模式。MEF进行自动装配时会根据CompositionContainer对象的ComposeParts方法中指定的对象开始,将其所有依赖的导入进行装配,非相关的不会进行装配,这点要注意,这个和Unity的自动装配还是有很大区别的。
  3. 导入导出。MEF的导出可针对类、属性、字段和方法,导入的话支持字段、属性和构造方法。对我印象最深的是,MEF居然很方便的将方法导出,由委托对象导入。例如:

    [Export] 

    private void Update()

    {

            // 逻辑处理。

    }

    [Import]

    private delegate void Action updateAction = null;

    在这里,MEF会将Update方法装配给updateAction委托字段。但是有一点需要注意,对于同样签名的方法,都是可以作为委托的导入值,而不是根据委托的类型来组装的,解决的办法是可以在导入导出时使用contractName属性。

    另外有一点值得注意的是,MEF进行装配是不限与public类型的,对private类型的也支持,但是在Silverlight中却不行,Silverlight中只支持public类型的。

    暂时就这么多,以后继续努力。

posted @ 2011-04-15 00:09  Fenglinz  阅读(599)  评论(0编辑  收藏  举报