Wirbel um Visual Studio 2010: neues Modell für die Plug-in-Entwicklung

Hinkte Visual Studio lange Zeit bei der Entwicklung von Plug-ins der freien Entwicklungsumgebung Eclipse hinterher, versucht Microsoft mit der Einführung des Managed Extensibility Framework (MEF) in .NET 4 aufzuholen.

In Pocket speichern vorlesen Druckansicht
Lesezeit: 7 Min.
Von
  • Gregor Biswanger
Inhaltsverzeichnis

Hinkte Visual Studio lange Zeit bei der Entwicklung von Plug-ins der freien Java-Entwicklungsumgebung Eclipse hinterher, versucht Microsoft mit der Einführung des Managed Extensibility Framework (MEF) in .NET 4 aufzuholen.

Schon lange darf Microsofts Entwicklungsumgebung Visual Studio als eine der umfangreichsten IDEs gelten. Dennoch ist nach all den Jahren die freie Entwicklungsumgebung Eclipse weiterhin um einiges mächtiger. Das liegt daran, dass für viele Entwicklungsszenarien hervorragende Plug-ins zur Verfügung stehen. Visual Studio hat in dem Kontext vergleichsweise wenig zu bieten. Die Ursache dafür liegt in dem viel zu komplex und unübersichtlich gestalteten Objektmodell der .NET-Schnittstellen für Entwickler. Eclipse bietet hingegen eine frei verfügbare Schnittstelle, die sich über XML ansprechen lässt, und insbesondere seitdem die modulare OSGi-Architektur die Basis für die Java-IDE ist, steht der Plug-in-Entwicklung unter Eclipse nichts mehr im Weg, frei nach dem Motto: "everything is a plug-in".

Das zentrale Interface zur Erweiterung von Visual Studio basierte bislang allein auf COM. Über der COM-Ebene liegen .NET Assemblies, die mit der COM-Schnittstelle agieren. Letztere bezeichnet man auch als Wrapper-Schnittstelle. Wrapper haben aber beiläufig einen Nachteil: Es lassen sich immer nur eingeschränkte Funktionen zur Verfügung stellen. Somit mag eine speziell gewünschte Funktion fehlen. Zudem sorgt, wie bei jeder COM-Technik, die enorm hohe Komplexität nicht gerade für ein Verständnis der dahinter liegenden Arbeitsweise.

Das neue .NET 4.0 enthält daher als neue Komponente das Managed Extensibility Famework (kurz MEF). Es fungiert zur Programmlaufzeit als leichtgewichtige Erweiterungsmöglichkeit der gewünschten Code-Logik. Bisher entwickelten .NET-Entwickler ihre Anwendungen erweiterbar und dynamisch, indem sie sie mühselig mit einer Plug-in-Infrastruktur versehen mussten. Große Teile der Infrastruktur hatten die Aufgabe, sich um das dynamische Laden von DLL-Assemblies und Typen zu kümmern.

Mit MEF lassen sich Anwendungen um Funktionen erweitern, die sich in externen Komponenten (DLL-Assemblies) befinden. Diese können wiederum andere externe Komponenten verwenden. Es reicht lediglich aus, ein Interface zur Verfügung zu stellen, das das Attribut "Export" enthält. Für die spätere Auflösung der Abhängigkeiten sorgt das Framework. Es erkennt zur Laufzeit die Assemblies, die das Interface und "Export" implementiert haben. MEF ruft ähnlich wie bei einem Service Locator oder bei Dependency Injection die gefundenen Assemblies auf und stellt deren Instanz bereit. Anwendungsentwickler müssen sich also nur noch um die Implementierung der Funktionen kümmern, die das Interface vorschreibt. Die neue MEF-Technik gibt somit dem Entwickler den Weg zur gewünschten Funktion vor, während bisher immer komplexe Objektaufrufe und Events bekannt sein mussten.