Wiederverwendung von Komponenten mit NuGet

Früher oder später kommt man als Softwareentwickler an den Punkt, wo man zu sich selber sagt: “Oooch menno. Das Problem habe ich doch bereits in einem anderen Projekt gelöst”. Spätestens zu diesem Zeitpunkt sollte man sich über die Wiederverwendung gemeinsamer Komponenten Gedanken machen. Im .NET Umfeld hat sich spätestens seit Visual Studio 2012 NuGet als Paketmanager etabliert. Warum nicht die vorhandene Technik nutzen, um sich seine eigene Komponenten-Bibliothek aufzubauen? Im folgenden möchte ich beispielhaft zeigen, wie das Setup aussehen könnte.

Als Beispielszenario habe ich die Wiederverwendung einer Basisklasse für MVVM ViewModels gewählt, die das INotifyPropertyChanged Interface implementiert. Die Basisklasse wird in zwei separaten Anwendungen verwendet. Als NuGet Feed kommt der Einfachheit halber ein lokales Verzeichnis zum Einsatz.

NuGet_Uebersicht

Die Library

Die Solution Library enthält eine Klassenbibliothek gleichen Namens mit der ViewModelBase Klasse, welche die wiederzuverwendende Implementierung von INotifyPropertyChanged enthält. Die Tests für die Ausimplementierung finden sich ebenfalls in der Solution.

Das Build-Ergebnis der Klassenbibliothek ist die DLL, die später in App1 und App2 referenziert und so die ViewModelBase Klasse verwendet werden soll. Dazu wird die DLL in ein NuGet-Paket verpackt. Am einfachsten geht das mit dem NuGet Package Explorer. Über die GUI wird ein neues Paket angelegt und per Drag & Drop die DLL hinzugefügt. Für spätere Änderungen oder Aktualisierungen am Paket kann die GUI alle Metadaten in eine .nuspec Datei speichern.

NuGet_PackageExplorer

Der Local NuGet Feed

Damit Visual Studio bei Bedarf NuGet Pakete findet, müssen die natürlich auch an einer bekannten Stelle liegen. Fürs erste reicht ein lokales Verzeichnis, in das einfach das oben erstellte NuGet Paket kopiert wird. In späteren Setups kann auch ein eigener Remote Feed zum Einsatz kommen.

Nun muss Visual Studio noch das Verzeichnis vom lokalen NuGet Feed kennen. Dazu wird ein neuer Eintrag in die NuGet Package Sources in den Optionen eingetragen.

NuGet_LokalFeedInVS

Das NuGet Paket verwenden

Das so vorbereitete Paket samt lokalen Feed würde nur wenig Sinn machen, wenn es nicht zum Einsatz kommen würde. Auch das ist denkbar einfach. Das NuGet Paket kann über eine grafische NuGet Paket Verwaltung pro Projekt in einer Solution installieren.

NuGet_PaketInstallieren

NuGet packt beim Installieren das Paket unterhalb von packages im Solution-Ordner aus und referenziert die darin enthaltenen DLLs in jedem Projekt, welches das Paket installiert bekommt.

Somit steht das Verwenden der ViewModelBase Klasse in ViewModel Implementierungen nichts mehr im Wege.

Fazit

NuGet bietet ein recht einfach zu bedienendes System zum Verwalten von wiederverwendbaren Komponenten. So ist es nicht verwunderlich, dass viele Open Source Bibliotheken auf NuGet.org zum Installieren bereitstehen.

Und es spricht meiner Meinung nach nichts dagegen, das System für eigene Zwecke mit privatem Package Feed zu verwenden. Die Herausforderung besteht nun darin, seine Pakete pro Anwendungsfall zu schnüren. Auch hier gilt Separation of Concerns und Minimize Dependencies.

NuGet bietet weit mehr Funktionalitäten, als ich sie hier beschreiben konnte. Der Artikel gilt vielmehr als Einstieg. Mehr Informationen rund zum Thema findet sich in den NuGet Docs und über die Internetsuche deines Vertrauens.

Das Beispielprojekt habe ich in einem Bitbucket– und einem GitHub-Repository bereitgestellt.

Wiederverwendung von Komponenten mit NuGet
Markiert in:     

Kommentar verfassen