jenswinter.com
Software Development 24/7

Einführung in das Managed Extensibility Framework (Teil 1)

September 29, 2008 22:33 by Jens
Anfang September wurde die zweite Preview eines interessantes Projektes des .NET Framework Teams auf Codeplex veröffentlicht. Es handelt sich dabei um das Managed Extensibility Framework (MEF). Die Projekt-Homepage befindet sich unter http://www.codeplex.com/mef.

Das MEF ist ein Framework, welches die Entwicklung von erweiterbaren .NET Anwendungen ermöglicht. Die Wiederverwendung und Erweiterung von Komponenten wird damit in Zukunft um einiges einfacher.
Bisher wurden Anwendungen erweiterbar und dynamisch entwickelt, indem mühselig eine Plugin-Infrastruktur eingebaut werden musste. Große Teile dieser Infrastruktur mussten sich um das dynamische Laden von Assemblies und Type kümmern. Viele Zeilen Quelltext sind geschrieben worden, um per Reflection auf externe Komponenten zuzugreifen.
Mit dem MEF wird dem Entwickler ein Großteil der Arbeit abgenommen.

In einer Artikelserie werde ich in die Verwendung das Managed Extensibility Frameworks einführen.

Was bietet das MEF?

Mit Hilfe des MEF können Anwendungen um Funktionalitäten erweitert werden, die sich in externen Komponenten befinden. Diese Komponenten können wiederum andere externe Komponenten verwenden. Für die Auflösung der Abhängigkeiten sorgt dabei das Framework. Anwendungsentwickler müssen sich also nur noch um die Implementierung der Funktionalitäten kümmern. Das Verknüpfen der Bestandteile wird komplett vom MEF übernommen.

Das Framework verfügt dabei über eine Reihe von Möglichkeiten, die benötigten Komponenten zu finden, einzusammeln und zu laden.

Die Erweiterungen können mit Meta-Informationen versehen werden. Dies erlaubt das Abfrufen und Filtern bestimmter Komponenten.

Im nächsten Artikel werde ich die Funktionsweise und Verwendung anhand einer kleinen Beispielanwendung demonstrieren. 

Hello @DotNetGerman Bloggers

September 29, 2008 21:33 by Jens

Ein herzliches Dankeschön an Alex für die Aufnahme meines Blogs in die Liste der deutschsprachigen .NET Blogger. Die Community Site ist zu erreichen unter http://dotnetgerman.com/.

Die Aufnahme ging übrigens mit dem Hinweis einher, dass bei .NET German Bloggers nur deutschprachige Beiträge gelistet werden sollen. Da ich in Zukunft wieder vermehrt deutschsprachigen Content - ähm, ich meine Inhalt - posten werde, dürfte diese Voraussetzung erfüllt sein. :)


Abhängigkeiten visuell aus Code erzeugen

September 25, 2008 21:42 by Jens
In der deutschsprachigen ALT.NET-Mailingliste ist eine sehr interessante Diskussion über die Erzeugung eines visuellen Abhängigkeitsgraphen aus dem Quelltext heraus entstanden. Der Gedanke, aus bestehendem Quelltext eine Architekturdokumentation generieren zu lassen klingt sehr vielversprechend.

Ralf Westphal schrieb ein Posting, in dem er fragte, wie man ein Fluent API dafür aufbauen könnte. Seine Idee sieht dabei in etwa so aus:

Konfiguration:

DIContainer.Instance
    .Root<IServiceA, ServiceA>()
        .uses<IServiceB, ServiceB>();
        

Dazugehöriger Quelltext:

class ServiceA : IServiceA
{
    private IServiceB _sb;

    public ServiceA()
    {
        _sb = DIContainer.Instance.Get<IServiceB>();
    }
}


Generierung des Graphen:

Bitmap bmp = DIContainer.Instance.DependencyGraph.ToBitmap();


Es gibt nur ein Problem, das ich bei dem Ansatz noch sehe. Es verletzt das DRY-Prinzip. Ralf konnte mich bisher noch nicht restlos vom Gegenteil überzeugen. Die Information der Abhängigkeit ist an zwei Stellen vorhanden. Einmal in der Konfiguration des Containers und ein zweites mal im Quelltext selbst.

Momentan bin ich der Überzeugung, dass man mit Hilfe des Managed Extensibility Frameworks diese Wiederholung der Informationen aufheben könnte. Ich forsche aber noch. :)

MEF is on CodePlex now

September 6, 2008 22:15 by Jens

Today Glenn Block announced that the first source bits of the Managed Extensibility Framework are out on CodePlex now.

This looks like a really interesting project. I think it could be very useful for some projects I'm currently working on. Tonight I'm going to explore the source a little bit. I'm especially interested in how it could be leveraged with Smart Client applications that are based on Prism.

From the project site:

The Managed Extensibility Framework (MEF) is a new library in .NET that enables greater reuse of applications and components. Using MEF, .NET applications can make the shift from being statically compiled to dynamically composed. If you are building extensible applications, extensible frameworks and application extensions, then MEF is for you.