Command Binding für WPF vereinfachen

Das View-Models für WPF ein sehr mächtiges Architekturpattern sind, ist anerkannt. Einfach nur nervig und redundant in der Notation sind dagegen Commands, wenn man sie nach dem Standardansatz mit RelayCommands implementiert. Für die Umsetzung von umfangreichen Commands für neue Features für Quality Spy hatte ich genug davon. Methoden als Command deklarieren So einfach muss es […]

Mehr lesen »

Elegante (N)Unit Tests für das Strategy Pattern

Der Sinn des Strategy Patterns liegt ja normalerweise darin, das selbe Ergebnis auf mehrere Arten berechnen zu können. Demnach macht es Sinn beim Unit Testing für die Schnittstelle der Strategy Testfälle zu definieren, die von allen Implementierungen durchlaufen werden. NUnit bietet dazu eine sehr komfortable und einfache Möglichkeit. TestFixtures können einfach voneinander erben. Im Testrunner […]

Mehr lesen »

PDB-Dateien mit der Common Compiler Infrastructure auslesen

Wie kann man zu einer Klasse bzw. Methode die Quelldatei und die Zeilennummer auslesen? Microsoft hat auf Codeplex dazu ein nettes Projekt veröffentlicht: die  Common Compiler Infrastructure: Metadata API. Folgender Code ist nötig: using Microsoft.Cci; … var host = new PeReader.DefaultHost(); var r = (IAssembly)host.LoadUnitFrom(@”D:\Development\DonkeyTools\src\DonkeyPlanner\bin\Debug\DonkeyPlanner.exe”); PdbReader/*?*/ pdbReader = null; string pdbFile = Path.ChangeExtension(@”D:\Development\DonkeyTools\src\DonkeyPlanner\bin\Debug\DonkeyPlanner.exe”, “pdb”); if […]

Mehr lesen »

So What Exactly is a View-Model

Interessanter Artikel auf InfoQ zum Thema MVVM:  “So What Exactly is a View-Model”. Es werden verschiedene Techniken vorgestellt, wie View-Models implementiert werden können. Das hat natürlich nur Relevanz für Desktop-Anwendungen, d.h heutzutage praktisch nur für WPF und Silverlight. Vielleicht auch mal für HTML5, wenn es groß und stark ist… In Webanwendungen à la MVC kann […]

Mehr lesen »

Prozedurales XML – mit Razor!

Wäre es nicht cool, wenn man die Razor-Syntax auch außerhalb von ASP.NET MVC verwenden könnte, z.B. um XML-Dateien zu definieren? Beispielsweise könnte man damit Testdaten generieren: <Points> @for(int i=0; i<3; i++) { <Point x=”@i” y=”0″ /> } </Points> Doch da soll noch nicht Schluss sein. Es wäre extrem cool, wenn man damit auch unendliche Streams […]

Mehr lesen »

Tracing von Features im Quellcode

Machen wir uns nichts vor. Selbst Vorzeige-Projekte mit Domain Driven Design haben das Problem, dass Funktionalität über viele Klassen zerstreut liegt. Wenn ein Feature bzw. eine Funktion “angefasst” werden soll, müssen viele Klassen angepasst werden. In einer sauberen Softwarearchitektur ist das sogar per se so, denn eine Funktion benötigt ja eine GUI, zumindest etwas Geschäftslogik, […]

Mehr lesen »

Thumbnails aus JPEG-Dateien mit C# auslesen

Schonmal gewundert, wie der Windows Explorer oder Picasa so schnell Thumbnails für Bilder erzeugen, auch wenn diese Bilder wirklich komplett neu sind und nicht bereits indexiert sein können? Das liegt einfach daran, dass in der JPEG-Datei bereits ein Thumbnails enthalten ist, welches von der Digitalkamera erzeugt wurde. Somit muss nicht einmal die komplette JPEG-Datei eingelesen […]

Mehr lesen »

x86 / x64 per MSBUILD – System.Data.SQLite 1.0.80.0

Eine Neuerung des ADO.NET Treibers für SQLite erfordert ggf. die Änderung des Build-Skriptes, falls man die Auswahl der x86 / x64 Variante in den Build von Visual Studio integrieren will: Mit der Version 1.0.80.0 genügt leider die einzelne Datei System.Data.SQLite.dll nicht mehr aus, sondern man benötigt noch die Datei SQLite.Interop.dll. In der Version 1.0.77.0 war das […]

Mehr lesen »

SQLite x86 / x64 Assemblies per MSBUILD auswählen

Mit dieser kleinen Änderung in der .csproj-Datei kann man SQLite unter .NET zum Nobrainer bei der Installation von Webprojekten machen: Wer SQLite nicht kennt, dem sei gesagt, dass SQLite leider nativ programmiert ist und für x86 und x64 separate DLLs ausliefert. Beim lokalen Entwickeln mit dem Visual Studio Development Server wird der Code als x86 […]

Mehr lesen »