Laden...

MEF : Dependency Injection Framework oder nicht

Erstellt von Ahrimaan vor 13 Jahren Letzter Beitrag vor 13 Jahren 3.614 Views
A
Ahrimaan Themenstarter:in
350 Beiträge seit 2010
vor 13 Jahren
MEF : Dependency Injection Framework oder nicht

Hallo zusammen,

nachdem mit zero_x mit meinem MEF Problem geholfen hat (Siehe Hier) kam bei mir der Gedanken auf nun ein Problem mit Dependency Injection zu lösen.
Dabei hat zero_x nun etwas durchklingen lassen das MEF sich dafür evtl. gar nicht eignet ?
Frank Dzaebel ein MVP schwört auf MEF und lässt da nix an MEF rankommen.

Wie seht Ihr das ? Ist MEF ein brauchbares DI Framework ? Oder würdet Ihr zu etwas anderem raten?
Hat jmd schon mit MEF aktiv gearbeitet und kann evtl. sogar Beispiele posten ?

Grüße

6.862 Beiträge seit 2003
vor 13 Jahren

Hallo,

schau mal hier: MEF "für die Tonne" - nicht zu Ende gedacht? Da hab ich mal vor ner Weile zwei Links gepostet die sich dem Thema annehmen. Ums kurz zu machen: MEF ist kein einfacher DI Container.

Baka wa shinanakya naoranai.

Mein XING Profil.

A
Ahrimaan Themenstarter:in
350 Beiträge seit 2010
vor 13 Jahren

Hi Talla,

werde mir die Links mal anschauen , Danke

1.044 Beiträge seit 2008
vor 13 Jahren

Hallo Ahrimaan,

zuerst muss man klären, wo der Unterschied zwischen IoC und DI ist. Erst dann kann man sich die Frage stellen, ob MEF überhaupt ein IoC- oder DI-Container ist.

IoC ist in meinen Augen das Prinzip oder mehr das Paradigma. Damit sagt man, wie etwas zu funktionieren hat. IoC ist also nur die Beschreibung. Mehr nicht. DI ist für mich das konkrete, das "erweiterte" IoC. Man sagt auch Dependency Injection, also Injection für Auflösen der Abhänigkeiten. Damit ist das "wie" gemeint. Wie werden die Abhänigkeiten injiziert? Das wäre DI.

DI und IoC bauen also aufeinander auf. MEF erfüllt beides. Ich würde eher sagen, dass es ein DI-Container ist. MEF arbeitet wie auch ein DI-Container. Der Zweck von MEF ist aber nicht, diesen als IoC/DI-Container zu verwenden, sondern um damit Anwendungen zu erweitern. Um Anwendungen erweitern zu können, brauchen wir genau dieses Prinzip. Jetzt stellt sich aber die Frage, ob man MEF dazu überhaupt verwenden soll!

Glenn Block hat darüber zwei Beiträge geschrieben(hier und hier). Dort schildert er genau, wo die Unterschiede bzw. ob MEF überhaupt ein IoC/DI-Container ist.

Denken wir weiter über das Thema, stellt sich die Frage, ob wir statt "normalen" IoC/DI-Container nicht einfach MEF verwenden können. Wir sagen also, dass MEF die gleichen Voraussetzungen wie LightCore, Unity, AutoFac, ect ... hat. Die Antwort darauf zu finden, ist ein wenig schwieriger. Auf StackOverflow findest du einige Antworten darauf. Vielleicht helfen dir die weiter.

Noch schlimmer: MEF zu anderen IoC/DI-Container zu mischen wird auch keine gute Idee sein. So weit möchte ich aber nichts ins Detail eingehen. Stichwort: CLS, Common Service Locator, Pattern & Practices, MSDN, p&p.

Siehe auch
DI/IoC - In wie Weit Klassen selbst instanziieren?
In wie weit man Abhängigkeiten auflösen sollte
Unterschied zwischen IoC Container und DI Container

zero_x

2.891 Beiträge seit 2004
vor 13 Jahren

Noch eine kleine Ergänzung von mir (Managed Extensibility Framework in Action :: 2010 :: Europe :: Microsoft Tech·Ed):

Zitat von: Dino Esposito Slide 18ff
MEF vs. IoC (General considerations)
MEF’s primary purpose
Is NEITHER dependency injection NOR centralized control of classes

Is (third-party) extensibility and discovery

Can I use MEF today to replace my favorite IoC tool?
Maybe—it all depends on your effective IoC needs

Scenario 1. MEF allows you to achieve the same you’re getting via IoC: go with MEF and find all assemblies in .NET 4 platform

Scenario 2. MEF gets you something you need, but you also need an IoC: well that’s a real concern to address

MEF vs. IoC (Technicalities)
Where they do overlap
Injecting code into classes
Where they do differ

MEF doesn’t offer centralized control of classes

Concrete types used must be decorated with MEF attributes

MEF doesn’t offer an AOP experience (i.e., interception)

All parameters on the constructor of a MEF class are Imports

MEF doesn’t offer built-in lifetime management (with the same level of control as most IoCs do)

  • Getting per-thread/per-session is possible but requires work

Conclusion: IoC and MEF do overlap; sometimes MEF can save you from using an IoC; not always though