Irgendwann ist immer das erste Mal. Bis zu meinem ersten Pull Request bei GitHub hat es eine ganze Weile gedauert. Ich wollte schon immer mal an einem Open Source Projekt mitarbeiten. Aufgrund von Zeitmangel nicht unbedingt in großem Stil. Sondern vielleicht hier und da kleinere Verbesserungen für eine Bibliothek, die ich auch in eigenen Projekten einsetze. Jetzt ist mein erster Pull Request angenommen worden. Die Idee dazu entstand beim Schreiben eines Artikels zur Visual Studio One.
Im Artikel „Wiederholungstäter“ geht es um die Scheduling-Bibliothek NCron. Damit können wiederkehrende Aufgaben in .NET geplant und ausgeführt werden. Komplett aufrollen möchte ich den Inhalt des Artikels hier nicht. Er kann in der Ausgabe 05/2013 der Visual Studio One nachgelesen werden.
Erweiterung für NCron
NCron unterstützt das Prinzip der Dependency Injection (DI) für die Verwaltung der geplanten Aufgaben und deren Abhängigkeiten. Standardmäßig unterstützt NCron nur Autofac. Mein Pull Request enthält die Integration des bekannten Dependency Injection-Containers LightCore. Diese Bibliothek habe ich schon in vielen Projekten genutzt und ebenso einen Artikel darüber verfasst.
Der Namensraum NCron.Integration.LightCore enthält alle Änderungen, die hauptsächlich in den beiden Dateien LightCoreContainer.cs und LightCoreIntegration.cs stecken.
Die erstgenannten Datei implementiert eine Wrapper-Klasse, da LightCore nicht das Disposable-Pattern in Form der IDisposable Schnittstelle unterstützt. Das wird von NCron aber verlangt. Diese Klasse muss ebenso alle Resolve-Aufrufe implementieren, die der DI-Container unterstützt beziehungsweise die eingesetzt werden sollen. Das hängt natürlich auch von der gewünschten Implementierung ab. Zusätzlich wird in der Klasse noch eine LightCore-Instanz gehalten.
Die Datei LightCoreIntegration.cs ist für die eigentliche Integration zuständig. Sie hält eine Instanz des Containers und kapselt alle Aufrufe, die an NCron gestellt werden und leitet sie an entsprechende Methoden des DI-Containers weiter. Damit ist bei der Integration sichergestellt, dass immer dann, wenn eine Aufgaben benötigt wird, diese aus dem DI-Container angefragt wird.
Das war es im Großen und Ganzen auch schon. Das meiste ist reine Schreibarbeit. Insbesondere die XML-Kommentare machen einen Großteil der notwendigen Codezeilen aus :).
Weitere Infos zur Integration, dem Einsatz von NCron und Anwendungsbeispiele finden sich im bereits erwähnten Artikel in der Visual Studio One.
Fazit
Kein großes Fazit an dieser Stelle. Die Änderungen am NCron-Projekt sind auch minimal. Klasse ist auf jeden Fall die Arbeit mit Git und GitHub. Die Zusammenarbeit der beiden Technologien ergibt Sinn und macht absolut Spaß.
Einige Infos, sowie Tipps und Tricks hat auch Ilker Cetinkaya in einem Blogpost zusammengefasst. Der ist absolut lesenswert.
Schreibe einen Kommentar