views:

2112

answers:

1

I'm just trying to get my head around the Managed Extensibility Framework (MEF) at the moment and digging into a bit. I have an Eclipse background so in my brain I currently have the equation:

MEF =~ OSGi for .NET

Based on what I have heard so far. Am I on the right lines?

+9  A: 

Scott Hanselman helped to highlights the specifics about MEF in his podcast 148 with Glenn Block.

Compared to OSGi, MEF is built upon "Inversion of Control" and OSGi is not: it (OSGi) will discover new bundle through a different mechanism based on a Life Cycle Layer.

MEF is focused on application extensibility. It uses DI as a strategy for composing the different extensions, however it is not in itself a generic DI container.

Since the last point can be confusing, the transcripts of the podcast can help:

The way I basically position it though, the difference between the two, is that IoC containers are really about managing a known set of things in different environments, like I want a logger in my disk environment, I want a mock logger in my test environment.

So MEF is really about managing an unknown set of things and what that boils down to is that in an IoC Container I tend to do either a convention-based or a registration, specific registration mechanism, to say here's what logger means, here's what this means, here's what that means.

MEF uses the code and a discovery mechanism and annotations on the code, which are attributes, where whatever shows up in the system, that's what's there.

So again, taking it to a higher level, it's about you use MEF to really manage a set of unknown things, you use IoC Containers to manage a set of known things.

Conclusion: (one of) the main difference is the discovery principle (IoC vs. lifecycle)

VonC
I think the podcast was slightly mistranscribed: "IoC containers are really about managing UNKNOWN set of things" should be "IoC containers are really about managing A KNOWN set of things"
Daniel Plaisted
@Daniel Thank you. Fixed.
VonC
You mention that MEF is built upon "Inversion of Control". http://ayende.com/Blog/archive/2008/09/25/the-managed-extensibility-framework.aspx says that the Managed Extensibility Framework is not an IoC container.
bhadra
It is an framework which solves very specific problems in an "IoC" way, but it is not indeed an "IoC" per se. From Gleen Block: So what I would say is that if you look around a scenario by scenario basis, there are some things we do that overlap with what IoCContainers do and how we do it may be very different but it's really about the end goal of what we build it for.
VonC