共用方式為


Managed Extensibility Framework (MEF)

One of the many announcements made at the PDC was that Visual Studio 10 will be built on top of WPF. In addition, VS will be using MEF as an extensibility mechanism. I just wanted to take a few minutes to explain what MEF is all about.

The Managed Extensibility Framework (MEF) is a library that makes it easy to develop reusable components. The framework provides a standard way for a host application to discover, expose and consume component extensions without the need for each of them to be coupled together.

At the heart of MEF is a ComposablePart, which exposes services or consumes externally provided services. This is done using a Contract, which can be as simple as adding an Import (to consume) or Export (to expose) attribute.

Although MEF is still in development, it already provides a number of key benefits, and would be worth a look if you are, or plan on working on extensible applications. Full source and documentation can be found on CodePlex. It also includes samples, but if there’s interest I’ll add a sample on my blog as a step-by-step walk through.

Comments

  • Anonymous
    November 22, 2008
    What is the difference b/w Unity DI framework and MEF? Where would one use one over the other? Thanks.

  • Anonymous
    December 09, 2008
    Hi Kris- The difference is primarily in the more detailed goals each one tries to achieve. Although there is some overlap, you could technically use both, as opposed to one over the other. The Unity framework is primarily focused around dependency injection, and giving you some flexibility around how and what is getting injected (i.e. constructor, property, and method call injection). MEF is specifically targetted towards extending applications, and does not provide all the features of the Unity Container. You currently have to use attributes to define what you will expose or consume (Import/Export), but the advantage is that it's very simple to use. There is a related mail thread on the MEF Discussion group that also explains the relationship with Add-Ins: http://www.codeplex.com/MEF/Thread/View.aspx?ThreadId=35083 And apologies for the delay; I passed your question along to the MEF team, but have yet to receive a response. I hope my answer helps clarify!