.Net中的插件框架Managed Extensibility Framework

Managed Extensibility Framework(MEF)是微软的一个用来扩展.NET应用程序的框架,它最初为了满足Visual Studio里的编辑器的需求,比如说,延迟加载所有东西和细粒度协定。随着托管代码慢慢地取代基于COM的扩展模型,MEF框架也逐渐成型。

MEF是在Codeplex上开源的,并且现在已经是.Net 4.0的一部分。我们可以用它非常容易的实现插件框架。一个简单的示例如下(使用时需要添加System.ComponentModel.Composition.dll 的引用): 

.Net中的插件框架Managed Extensibility Framework
    class Program

    {

        [Import]

        ILogger logger;



        void Compose()

        {

            var catalog = new AssemblyCatalog(this.GetType().Assembly);

            var container = new CompositionContainer(catalog);

            container.ComposeParts(this);

        }



        public static void Main(string[] args)

        {

            var p = new Program();

            p.Compose();



            p.logger.LogMessage("hello world");

        }

    }



    interface ILogger

    {

        void LogMessage(string msg);

    }



    [Export(typeof(ILogger))]

    class ConsoleLogger : ILogger

    {



        public void LogMessage(string msg)

        {

            Console.WriteLine(DateTime.Now + ": " + msg);

        }

    }
View Code

 这个例子比较简单,并不能很好的体现MEF带来的便利,MS官方的一个稍微复杂点的例子SimpleCalculator更合适一些。

不过,从这个例子中也可以看出MEF的基本工作方式:服务方通过ExportAttribute导出可提供的服务,使用者通过ImportAttirbute导入所需要的服务。它们之间彼此隔离而独立,服务对象的创建由MEF框架完成,并能提供单例、延迟加载等特性,而无须我们显式编码实现。

CodeProject上也有几篇不错的入门教程:

  1. An Introduction to Managed Extensibility Framework

MSDN电子杂志上也有一篇介绍得非常详细的文章:Building Composable Apps in .NET 4 with the Managed Extensibility Framework

由于篇幅所限,对于MEF这里并不做更多的介绍,如果想更深入的了解它的话,可以参看MSDN官方文档:Managed Extensibility Framework,其Codeplex的主页上的文档也值得一看。另外,园子里也有一系列文章写的非常不错的:《MEF程序设计指南》博文汇总

你可能感兴趣的:(framework)