2009-03-28 5 views
11

Je commence une nouvelle application Winforms, et j'ai l'intention d'utiliser un framework IoC/DI (probablement Ninject, mais je pense aussi à StructureMap et LinFu).Cadres IoC/DI avec applications Smart Client Winform: Comment aborder cette question?

Il semble que presque tous ceux qui utilisent IoC/DI le font dans un environnement Web et n'ont pratiquement rien trouvé à utiliser Winforms avec. Je voudrais savoir si quelqu'un utilise IoC/DI avec Winforms et quelles approches vous avez utilisées pour traiter les problèmes liés à Winforms (par exemple, comment rendre le conteneur disponible dans différentes parties de l'application, pensez-vous utiliser le framework pour instancier vos formulaires, etc.)

Si quelqu'un connaît des projets basés sur Winform Open Source qui utilisent IoC/DI (peu importe le framework, je devrais être capable de traduire des concepts) Je voudrais liens vers ceux aussi bien.

EDIT:

sont les gens tout simplement pas écrire des clients intelligents plus?

EDIT:

Si vous pouviez me pointer vers un code dans le monde réel qui utilise IoC/DI dans un Winforms ou même application de type console (c.-à quelque chose qui ne basée sur le Web) Je vous en serais reconnaissant.

EDIT:

Je me sers Ninject et a découvert que Ninject se fera un plaisir d'injecter une instance de son interface noyau commun si vous spécifiez un paramètre constructeur IKernel. Cela a bien fonctionné, mais j'aimerais quand même entendre d'autres approches que les gens utilisent.

+0

jikes J'ai beaucoup à apprendre sur .net. Je ne comprends même pas la question. – Nifle

+0

En fait, ces concepts ont été popularisés en Java. Et ce n'est pas lié à. NET en soi, je suis juste en train d'utiliser ces techniques dans. NET –

+0

Avez-vous trouvé des meilleures pratiques sur la façon de rendre le conteneur accessible à travers l'application? Ou est-ce la dernière EDIT? Cela signifie-t-il que je peux juste donner des classes qui en ont besoin d'un paramètre 'IKernel' et que Ninject fait le reste (même dans un autre sous-projet)? – InvisiblePanda

Répondre

5

J'ai récemment commencé à écrire une nouvelle application WinForms à partir de zéro en utilisant StructureMap for IoC. J'ai déjà regardé SCSF et CAB, mais je les ai trouvés trop complexes. J'ai écrit quelques API couramment sur le registre de StructureMaps afin que nos modules puissent enregistrer des commandes, des présentateurs et des vues. D'après mon expérience, cela valait la peine d'essayer tous les aspects, je ne voudrais jamais écrire une application WinForms sans utiliser à nouveau ces outils et l'approche modulaire hautement structurée.

+0

Pouvez-vous donner quelques exemples d'où vous voyez IoC/DI comme une victoire? J'entre dans ce domaine, donc je ne comprends pas tout à fait ce que vous voulez dire. –

+0

Ok, notre application utilise IoC, MVP, DDD, TDD et des interfaces fluides partout. Même si c'est devenu une bête assez complexe, je suis très confiant dans sa qualité. En utilisant l'IoC, nous pouvons extraire chaque élément de l'application et le tester isolément. Nous avons configuré TeamCity pour exécuter des tests sur chaque validation. – grover

+0

En utilisant IoC, nous avons été en mesure de réagir facilement aux demandes des clients, en changeant les implémentations de service. Un exemple: Nous avons changé les dépôts DDD à la demande, nous avons changé le comportement de l'interface utilisateur en changeant de présentateur. Pas plus "si l'application en mode x alors faire d'autres z 'merde. Même le câblage de différents comportements d'interface utilisateur a également aidé. – grover

6

L'équipe des modèles et des pratiques Microsoft qui gère le conteneur d'injection Unity a également créé le Smart Client - Composite UI Application Block pour les winforms, qui, selon moi, utilise Unity. Je connais la nouvelle version de WPF appelée Composite Client Application Guidance (codename Prism) utilise Unity

+0

Je ne vois vraiment rien sur Unity là-bas ... je vais creuser un peu plus profond, mais je pense que CUIAB est antérieure à Unity. –

1

J'ai écrit une application pour afficher des cartes à partir de données vectorielles OpenStreetMap (http://wiki.openstreetmap.org/index.php/Kosmos). J'ai développé mon propre framework MVP qui utilise Windsor Castle comme conteneur IoC. Vous pouvez télécharger le code source si vous êtes intéressé, il est actuellement sous licence BSD.

En ce moment je travaille (lentement) sur une refonte de ce framework pour pouvoir générer dynamiquement des formes (au lieu d'utiliser le concepteur visuel). Je suis en train de jouer avec l'idée d'introduire une sorte d'interface fluide pour créer des formulaires et des contrôles, mais je n'ai pas encore trouvé une solution élégante pour cela.

0

Si vous voulez simplement un conteneur Inversion of Control et que vous souhaitez obtenir un niveau inférieur à Unity, consultez ObjectBuilder dans le groupe Microsoft Patterns and Practices. Unity est une couche d'abstraction sur ObjectBuilder.

Questions connexes