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); } }