Mehr von Jürgen Gutsch

Mehr von Jürgen Gutsch

Empfehlungen von Jürgen Gutsch

Blog-Empfehlungen von Jürgen Gutsch

Willkommen bei ASP.NET Zone. Anmelden | Registrieren | Hilfe

Jürgen Gutsch

ASP.NET und mehr...
LightCore 2.0

Beim MVP Summit gab es am letzten Tag ein Hackathon mit dem Ziel ASP.NET 5 zu unterstützen. Das Hauptanliegen war sicher die Dokumentation, aber es ging auch darum Samples und Bibliotheken auf die neuesten Version von ASP.NET 5 und .NET Core zu heben.

Albert Weinert war es, der mich auf die Idee brachte LightCore auf .NET Core zu heben. Also habe ich ich den Tag drangesetzt die Bibliothek .NET Core kompatibel zu machen. Der größte Aufwand lag nicht darin, die eigentliche Bibliothek für .NET Core zu bauen, sondern alle Unit-Tests von NUnit nach XUnit zu portieren. Im gleichen Zuge habe ich die NUnit Asserts durch FluentAssertion ersetzt. Ein zukünftiger Wechsel des Test-Frameworks sollte dann kein Problem so großes Problem mehr sein.

Aktueller Stand

In der neuen Version habe ich in Bezug auf Silverlight und Compact Framework einen harten Schnitt gemacht. Diese Plattformen werden nicht mehr direkt unterstützt. Sollte die .NET Core Bibliothek kompatibel zu Silverlight und Compact Framework sein (was ich im Moment weder ausschließen noch bestätigen kann) so ist das eher Zufall.

Unterstützt werden ASP.NET 5, UWP, .NET Framework und Mono.

Abstriche muss LightCore in der LightCore.Configuration unter .NET Core machen, da der XAML-Reader nicht zur Verfügung steht. Diesen werde ich nur für das .NET Framework aktivieren. In allen anderen Fällen wird es eine JSON Konfiguration geben. Die JSON Konfiguration soll die bevorzugte Art der Konfiguration für ASP.NET 5 und UWP sein, abgesehen von der Konfiguration per Code natürlich.. 

Die alte Integration Web wird nicht angefasst, um Kompatibel zu MVC3 und -4 zu bleiben, verweist aber auf die .NET Core Version von LightCore. Zusätzlich wird es aber eine ASP.NET 5 Integration geben.

Der ThreadSingeltonLifecycle Manager ist aktuell für .NET Core deaktiviert, da System.Threading.Thread nicht mehr zur Verfügung steht. Hier muss eine andere Lösung gefunden werden, um die aktuellen Threads zu identifizieren. Dieser Livecycle wird vorläufig nur unter .NET Framework zur Verfügung stehen.

Im Falle von Reflection beim ermitteln von zu injizierenden Eigenschaften steht unter NET Core der BindingFlags.SetProperty nicht zur Verfügung, es werden hier also Performance-Einbußen möglich sein, wenn nun Eigenschaften ohne Setter ermittelt und geprüft werden müssen.

Eine weitere Baustelle ist der CommonServiceLocator, da die ServiceLocatorImplBase unter Microsoft.Practices.ServiceLocation noch nicht für .NET Core zur Verfügung steht. Eventuell macht eine eigene Implementation für .NET Core mehr Sinn. Der CommonServiceLocator bleibt für das .NET Framework bestehen.

Bei den Unit-Tests zur LightCore.Configuration gab es Probleme mit drei Tests die fehlschlagen, wenn sie nicht einzeln aufgerufen werden. Das liegt daran, dass XUnit die Tests parallel ausführt und der RegistrationLoader in LightCore nicht Thread-Save ist und auch nicht zwingend sein muss. Die verhauen sich also gegenseitig die Referenzen. Ein Lock um alle Tests die RegistrationLoader.Instance.Register() aufrufen behebt das Problem.

Ein öffentlicher Buildserver – mit AppVeyor - ist ebenfalls eingerichtet

Weitere Ideen

  • Die Idee Property-Injection ausschließlich über ein MarkerAttribut zuzulassen steht wieder im Raum. Das würde die Performance an dieser Stelle erhöhen.
  • Der Wegfall von benannten Instanzen wurde mehrfach kritisiert. Ich kann mir vorstellen, dass dieses Feature wieder Einzug findet. Natürlich ist das kein optimales Pattern, aber wie in allen Fällen, können schöne Patterns in der realen Welt nicht immer durchgezogen werden.

Contributions needed

Wie bereits geschrieben, müssen die Web Integrationen noch umgestellt werden, sowie alle Samples, Dokumentationen und die Performance-Tests.

Den aktuellen Stand könnt ihr auf GitHub direkt in folgendem Feature-Branch mitverfolgen: https://github.com/juergengutsch/lightcore/tree/jg/portable

Ich würde euch bitten Ideen, Anregungen und Probleme ebenfalls auf GitHub einzutragen.

Wer sich aktiv an der Entwicklung beteiligen möchte, ist herzlich eingeladen. Forkt auch den Stand, holt auch den Feature-Branch und schickt mir die Pull-Requests.

Posted: Montag, 16. November 2015 08:56 von Jürgen Gutsch
Abgelegt unter: , , ,

Kommentare

Keine Kommentare

Anonyme Kommentare sind nicht zugelassen