Why exactly isn't MEF a DI/IoC container?

.NetDependency Injection

.Net Problem Overview


It's been said on the blogosphere and by Microsoft themselves that MEF isn't another IoC container.

OK...but why? It seems the same to me. Maybe it's not as good as Unity or Castle Windsor, but it still fits the definition, doesn't it?

Why isn't MEF an IoC Container like Unity or Castle Windsor?

.Net Solutions


Solution 1 - .Net

MEF has potential, but as a DI container, it lacks:

  1. Code as Configuration
  2. Auto Registration
  3. XML configuration (not so important to me)
  4. Custom Lifetimes
  5. Interception

Those things are pretty important.

For Lifestyle it lacks:

  1. Per graph
  2. Web Request Context
  3. Thread Context
  4. Session Context
  5. Pooled
  6. Scoped
  7. Custom Reference

References: - Mark Seemann's book "Dependency Injection in .NET"

Solution 2 - .Net

In my world DI is based on three dimensions, Object Composition, Lifetime Management, and Interception. This is what other full-blown DI containers, such as Unity, Castle Windsor, and Ninject facilitates. MEF only supports the one dimension, Object Composition. It is doing this quite well, but the remaining two dimensions are not supported in MEF.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionCVertexView Question on Stackoverflow
Solution 1 - .NetTom StickelView Answer on Stackoverflow
Solution 2 - .NetMads Tjørnelund ToustrupView Answer on Stackoverflow