2008-10-19 12 views
66

Es wurde auf der Blogosphäre und von Microsoft selbst gesagt, dass MEF kein weiterer IoC-Container ist.Warum ist MEF kein DI/IoC-Container?

OK ... aber warum? Es scheint mir dasselbe zu sein. Vielleicht ist es nicht so gut wie Unity oder Castle Windsor, aber es passt immer noch zur Definition, oder?

Warum ist MEF nicht ein IoC Container wie Unity oder Castle Windsor?

+2

Sie könnten mir eine upvote zumindest lassen halten für den Link zu den In Herden leben Code Interview :) – Kev

+0

Sure Kev. Tut mir leid, aber die Glen Blocks Antwort in hanselminutes war viel detaillierter. Das Interview, das Sie gepostet haben, war gut, hat mir aber mehr Fragen als Antworten hinterlassen. – CVertex

+1

Wir haben das in einer kürzlichen hanselminutes Episode behandelt. http://www.hanselminutes.com/default.aspx?showID=166 –

Antwort

8

In meiner Welt basiert DI auf drei Dimensionen, Objektzusammensetzung, Lifetime Management und Interception. Dies ist es, was andere vollwertige DI-Container wie Unity, Castle Windsor und Ninject ermöglichen. MEF unterstützt nur die eine Dimension, die Objektkomposition. Es macht das recht gut, aber die verbleibenden zwei Dimensionen werden in MEF nicht unterstützt.

+3

Lifetime-Management ist jetzt in MEF 2.0 in 4.5/4.0 auf Nuget zusätzlich zu einem Convention-basierten Konfigurationsmodell erheblich verbessert. Interception ist nicht vorhanden, obwohl MEF Contribut eine Erweiterung für AOP/Interception hat. –

9

MEF hat Potential, sondern als DI-Container, fehlt es an:

  1. -Code als Konfiguration
  2. Auto Registration
  3. XML-Konfiguration (nicht so wichtig für mich)
  4. Individuelle Lebensdauern
  5. Interzeption

Diese Dinge sind ziemlich wichtig.

Für Lifestyle es fehlt:

  1. Per Graph
  2. Web anfordern Kontext
  3. Thread-Kontext
  4. Session Context
  5. Pooled
  6. Scoped
  7. Benutzerdefinierte Referenz

Referenzen: - Mark Seemann Buch "Dependency Injection in .NET"