comment obtenir des dépendances injectées dans des constructeurs dans Windows Forms

dans asp.net-mvc J’ai la Windsor Controller Factory qui injecte toutes les dépendances dans les contrôleurs, mais comment l’obtenir dans Windows Forms?

Par exemple, si j’ai ce Form1, comment vais-je obtenir une instance de Form1, dois-je utiliser une résolution (appelée ServiceLocator et anti-pattern par un ppl)?

public class Form1 { private IBarService _barService; public Form1(IBarService barService) { _barService = barService; } } 

Oui, dans program.cs, vous devez demander à windsor de résoudre Form1 . Afin de pouvoir afficher le formulaire dans le concepteur, ajoutez un constructeur vide et décorez-le avec l’atsortingbut Obsolete .

L’utilisation de l’ injection de constructeur pour les formulaires (ou d’autres vues dans d’autres infrastructures d’interface utilisateur) pose souvent problème car le concepteur Visual Studio attend et suppose un constructeur par défaut.

Dans tous les cas, un formulaire ou un autre contrôle visuel doit être une vue stupide sans comportement. Son but est d’afficher toutes les données que vous liez. L’utilisation des fonctionnalités de liaison de données vous aide souvent à vous contraindre à cette forme d’affichage passive.

Cela signifie que vous avez besoin d’une sorte de contrôleur capable d’instancier la vue (formulaire) et de lui lier la source de données.

C’est beaucoup plus facile à faire avec une technologie telle que WPF, mais c’est également possible avec Windows Forms. Pour trouver de l’ inspiration sur la façon de procéder avec Windows Forms, je vous suggère de jeter un coup d’œil au Composite Application Block (maintenant à la retraite) – c’est trop compliqué, mais il devrait vous donner quelques idées sur la manière de mettre en œuvre quelque chose de similaire.