.Net中的插件框架Managed Extensibility Framework


Managed Extensibility Framework(MEF)是微軟的一個用來擴展.NET應用程序的框架,它最初為了滿足Visual Studio里的編輯器的需求,比如說,延遲加載所有東西和細粒度協定。隨着托管代碼慢慢地取代基於COM的擴展模型,MEF框架也逐漸成型。

MEF是在Codeplex上開源的,並且現在已經是.Net 4.0的一部分。我們可以用它非常容易的實現插件框架。一個簡單的示例如下(使用時需要添加System.ComponentModel.Composition.dll 的引用): 

    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程序設計指南》博文匯總


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM