Wie verwenden Sie das Managed Extensibility Framework?


10

Ich arbeite seit ungefähr 2 Wochen mit MEF. Ich begann darüber nachzudenken, wofür MEF gedacht ist, recherchierte, um herauszufinden, wie man MEF verwendet, und implementierte schließlich einen Host mit 3 Modulen. Die Verträge erweisen sich als leicht verständlich und die Module sind leicht zu verwalten.

Obwohl MEF einen sehr praktischen Nutzen hat, frage ich mich, inwieweit? Ich meine, wird jeder bestehende Anwendungen aus Gründen der Erweiterbarkeit neu schreiben?

Ja, das klingt und ist wahnsinnig unpraktisch. Rhetorisch gesprochen:

  • Wie wirkt sich MEF auf die aktuellen Programmtrends aus?

  • Haben Sie nach Möglichkeiten gesucht, MEF zu nutzen?

  • Haben Sie begonnen, eine umfassende Überarbeitung einer vorhandenen App zu planen, die möglicherweise von der Erweiterbarkeit profitiert?

Meine Fragen lauten jedoch:
Woher weiß ich, wann ich ein neues Projekt mit Erweiterbarkeit planen sollte?
Woher weiß ich, ob ein vorhandenes Projekt aus Gründen der Erweiterbarkeit neu geschrieben werden muss?

Verwendet jemand MEF?

Antworten:


8

Verwendet jemand MEF?

Ich arbeite an einem Silverlight-Projekt mit dem MVVM-Muster. Wir haben zunächst alle VMs nach Bedarf über Schnittstellen und manuelle Abhängigkeitsinjektion miteinander verbunden (je nach Bedarf entweder Konstruktor- oder Eigenschaftsinjektion). Es wurde langsam schmerzhaft und wir begannen, MEF als Framework für die Abhängigkeitsinjektion zu verwenden, um bestimmte Dienste, die über Ansichtsmodelle hinweg verwendet werden, zu exportieren und in die Ansichtsmodelle zu importieren, die sie benötigen. Funktioniert perfekt und mit sehr wenig Code.

Ja, es gibt einige Puristen, die sagen, dass MEF nicht für die Abhängigkeitsinjektion gedacht ist und ein echtes Abhängigkeitsinjektions-Framework viel besser funktioniert. MEF ist jedoch direkt in .NET integriert, was ein großes Plus ist und ausreicht, um unsere Anforderungen zu erfüllen.

Woher weiß ich, wann ich ein neues Projekt mit Erweiterbarkeit planen sollte? Woher weiß ich, ob ein vorhandenes Projekt aus Gründen der Erweiterbarkeit neu geschrieben werden muss?

IMO, Sie sollten Bedenken immer angemessen trennen und Schnittstellen verwenden, damit sich verschiedene Module unabhängig voneinander ändern können. Wenn Sie dies richtig machen, sollte es einfach sein, MEF hinzuzufügen , wenn Sie einen Bedarf an Erweiterbarkeit finden . Aber ich würde kein Projekt starten, das keine Erweiterbarkeitsanforderungen hatte, und MEF nur für den Fall einsetzen. Ich würde darauf warten, dass es einen Bedarf gibt. Bei Bedarf würde ich bei Bedarf den Aufwand für die Neuverdrahtung des Projekts bewerten, um MEF im Vergleich zu alternativen Lösungen zu verwenden und nichts zu tun, und herausfinden, welche davon gewinnen.


6

Der Fehler, den die Leute machen, und ich denke, das liegt an der Benennung (Managed Extensibility Framework) in der Annahme, dass MEF nur für die Erweiterbarkeit praktisch ist. MEF spricht wirklich drei wichtige Dinge an: Erweiterbarkeit, Ermittlung und Metadaten. Die letzten beiden sind selbst für eine Anwendung sehr leistungsfähig, bei der niemals ein einziges Plug-In oder eine einzige Erweiterung angezeigt wird.

Dies ist ein Artikel, den ich über die Fähigkeit zur Entdeckung als IOC-Container geschrieben habe: http://www.informit.com/articles/article.aspx?p=1635818

Ich verwende MEF in den meisten Unternehmensanwendungen, da es das Erstellen und Verwalten modularer Anwendungen in Silverlight schneller und einfacher macht.


Ich habe Ihren Artikel gelesen - mindestens zweimal;)
IAbstract

4

Derzeit verwende ich MEF in einigen Projekten, die das Repository-Muster enthalten.

Einer verwendet beim Testen von Einheiten unterschiedliche Repository-Typen, das andere Projekt verwendet lokale (direkt an DB), Remote- (WCF) und Test-Repositorys.

Beide Projekte können ihre Repository-Typen über Code oder Konfiguration ändern und basieren auf MEF-Metadaten / Lazy-Typen.

Bisher laufen beide Projekte unglaublich gut.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.