11 Stimmen

IoC/DI-Frameworks mit Smart Client Winform-Anwendungen: Wie sollte ich vorgehen?

Ich beginne eine neue Winforms-Anwendung, und ich beabsichtige, ein IoC/DI-Framework zu verwenden (wahrscheinlich Ninject, aber ich denke auch an StructureMap und LinFu).

Es scheint, als ob fast jeder, der IoC/DI verwendet, dies in einer webbasierten Umgebung tut und praktisch nichts über die Verwendung von Winforms damit gefunden hat.

Ich würde gerne wissen, ob jemand IoC/DI mit Winforms verwendet und welche Ansätze Sie verwendet, um mit Winforms bezogenen Fragen (z. B. wie Sie den Container in verschiedenen Teilen der App verfügbar machen, verwenden Sie den Rahmen, um Ihre Formulare zu instanziieren, etc )

Wenn jemand irgendwelche quelloffenen Winforms-basierten Projekte kennt, die IoC/DI verwenden (egal welches Framework, ich sollte in der Lage sein, Konzepte zu übersetzen), hätte ich gerne auch Links zu diesen.

EDIT :

Schreiben die Leute einfach keine Smart Clients mehr?

EDIT :

Wenn Sie mich auf einige realen Code, der IoC/DI in einer Winforms oder sogar Konsole Typ Anwendung (dh etwas, das nicht Web-basiert ist) verwendet zeigen könnte, würde ich es zu schätzen wissen.

EDIT :

Ich habe Ninject verwendet und entdeckt, dass Ninject gerne eine Instanz der gemeinsamen Kernel-Schnittstelle injiziert, wenn Sie einen IKernel-Konstruktorparameter angeben. Dies hat ziemlich gut funktioniert, aber ich würde immer noch gerne hören, andere Ansätze Menschen verwenden.

0 Stimmen

Jikes Ich muss noch eine Menge über .net lernen. Ich verstehe nicht einmal die Frage.

0 Stimmen

Eigentlich wurden diese Konzepte in Java populär gemacht. Und es hat nichts mit .NET an sich zu tun, ich verwende diese Techniken nur in .NET

0 Stimmen

Haben Sie bewährte Verfahren gefunden, wie man den Container über die Anwendung zugänglich macht? Oder ist es das, worum es im letzten EDIT geht? Bedeutet das, dass ich den Klassen, die es brauchen, einfach einen IKernel Parameter und Ninject erledigt den Rest (auch in einem anderen Unterprojekt)?

6voto

bendewey Punkte 38830

Das Microsoft Patterns and Practices Team, das die Einigkeit Injektionscontainer hat auch die Smart Client - Composite UI Anwendungsblock für Winforms, das meines Wissens Unity verwendet. Ich weiß, dass die neue WPF-Version namens Composite Client Application Guidance (Codename Prism) verwendet Unity

0 Stimmen

Ich sehe da nicht wirklich etwas über Unity... ich werde ein wenig tiefer graben, aber ich glaube, CUIAB ist älter als Unity.

5voto

grover Punkte 2225

Ich habe vor kurzem begonnen, eine neue WinForms-Anwendung von Grund auf mit StructureMap für IoC zu schreiben. Ich habe mir zuvor SCSF und CAB angesehen, fand diese aber zu komplex.

Ich habe einige fließende APIs auf der StructureMaps-Registry geschrieben, damit unsere Module Befehle, Präsentatoren und Ansichten registrieren können.

Nach meiner Erfahrung hat sich der Aufwand in jeder Hinsicht gelohnt, ich würde nie wieder eine WinForms-App schreiben wollen, ohne diese Werkzeuge und den hochstrukturierten modularen Ansatz zu verwenden.

0 Stimmen

Können Sie einige Beispiele nennen, wo Sie IoC/DI als Gewinn sehen? Ich beschäftige mich gerade erst mit diesem Thema und verstehe daher nicht ganz, was Sie meinen.

0 Stimmen

Ok, unsere App verwendet überall IoC, MVP, DDD, TDD und fließende Schnittstellen. Auch wenn sie bereits ein ziemlich komplexes Biest geworden ist, bin ich sehr zuversichtlich, was ihre Qualität angeht. Mit IoC können wir jedes einzelne Teil der App herausziehen und isoliert testen. Wir haben TeamCity so eingerichtet, dass die Tests bei jedem Commit ausgeführt werden.

0 Stimmen

Durch den Einsatz von IoC konnten wir leicht auf Kundenwünsche reagieren, indem wir die Service-Implementierungen wechselten. Ein Beispiel: Wir haben DDD-Repositories bei Bedarf gewechselt, wir haben das UI-Verhalten geändert, indem wir die Moderatoren gewechselt haben. Kein 'wenn App in Modus x, dann y, sonst z'-Mist mehr. Auch die Verdrahtung eines anderen UI-Verhaltens war hilfreich.

1voto

Igor Brejc Punkte 18057

Ich habe eine Anwendung zur Anzeige von Karten aus OpenStreetMap-Vektordaten geschrieben ( http://wiki.openstreetmap.org/index.php/Kosmos ). Ich habe mein eigenes einfaches MVP-Framework entwickelt, das Windsor Castle als IoC-Container verwendet. Sie können den Quellcode herunterladen, wenn Sie interessiert sind, es ist derzeit BSD-lizenziert.

Im Moment arbeite ich (langsam) an einem Redesign dieses Frameworks, um Formulare dynamisch generieren zu können (anstatt den visuellen Designer zu verwenden). Ich spiele mit dem Gedanken, eine Art fließende Schnittstelle für die Erstellung von Formularen und Steuerelementen einzuführen, aber ich habe noch keine elegante Lösung dafür gefunden.

0voto

Travis Heseman Punkte 11179

Wenn Sie nur einen Container für die Umkehrung der Kontrolle suchen und etwas tiefer gehen wollen als Unity, sollten Sie sich ObjectBuilder aus der Microsoft-Gruppe Patterns and Practices. Unity ist eine Abstraktionsschicht über ObjectBuilder.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X