Por que exatamente o MEF não é um recipiente DI / IoC?

Tem sido dito na blogosfera e pela própria Microsoft que o MEF não é outro contêiner da IoC.

OK mas porquê? Parece o mesmo para mim. Talvez não seja tão bom quanto Unity ou Castle Windsor , mas ainda se encheckbox na definição, não é?

Por que o MEF não é um contêiner IoC como Unity ou Castle Windsor?

O MEF tem potencial , mas como contêiner DI, não possui:

  1. Código como configuração
  2. Registro automático
  3. Configuração XML (não é tão importante para mim)
  4. Tempos de vida personalizados
  5. Interceptação

Essas coisas são muito importantes.

Para o estilo de vida, falta:

  1. Por gráfico
  2. Contexto de solicitação da Web
  3. Contexto de Thread
  4. Contexto da Sessão
  5. Pooled
  6. Escopo
  7. Referência Personalizada

Referências: – O livro de Mark Seemann “Injeção de Dependência em .NET”

No meu mundo, DI é baseado em três dimensões, Composição de Objetos, Gerenciamento de Vida Útil e Interceptação. Isso é o que outros recipientes DI completos, como Unity, Castle Windsor e Ninject, facilitam. O MEF suporta apenas a dimensão one, Object Composition. Está fazendo isso muito bem, mas as duas dimensões restantes não são suportadas no MEF.