kernel.Bind<StatisticsPresenter>().ToSelf().InSingletonScope(); kernel.Bind<IStatisticsView>().To<StatisticsForm>(); kernel.Get<IStatisticsView>();
3 Réponses :
C'est certainement une zone intéressante de, dois-je dire, recherches. Nous nous sommes rendus une solution où nous organisons des contrôles utilisateur sur une forme générique. p>
Notre formulaire générique n'est pas destiné à être utilisé avec le concepteur. Par le code, nous ajoutons le contrôle de l'utilisateur choisi au formulaire de manière dynamique. p>
Pour d'autres cadres, vous devriez regarder Prism / Composite de le groupe Microsoft Stands & Pratics. Voici un article discuter des extensions pour WinForms. P>
Mon approche d'utilisation Ninject avec des formulaires, UserControls et le concepteur est:
Vous pouvez utiliser le concepteur et avoir des formes et des utilisateurs avec des dépendances injectées via Ninject. p>
Le seul inconvénient est que vous devez utiliser une injection de propriété au lieu de l'injection de constructeur pour les UserControls (et Les formulaires) p> Créez le noyau et ajoutez la stratégie d'activation p> extensions du noyau à itérer sur les contrôles des descendants p>
J'ai récemment créé des Ma solution est, une classe de base pour activer moins d'injection de propriété. L'injection de constructeur n'est pas prise en charge, car un constructeur sans paramètre est utilisé pour créer ces instances. P> usercontrols réutilisables code> avec le besoin de dépendances à injecter. Comme le conteneur
ioc code> n'est pas utilisé pour créer ces
usercontrol code> S, il ne peut évidemment pas injecter automatiquement les dépendances.
[Inject]
public IService Service { private get; set; }
Notez que le cadre que j'ai utilisé pour implémenter cette solution est wpf code>, mais cela devrait fonctionner assez similaire à l'aide de
Winforms code>
Quelle était la solution éventuelle? Je cherche également un moyen d'utiliser UserControls dans le concepteur et d'utiliser une injection de dépendance.
S'il vous plaît laissez-nous savoir si vous avez trouvé une solution réalisable. Merci!
Fondamentalement, j'ai utilisé le concepteur pour faire glisser les commandes utilisateur sur le formulaire et exposé ces commandes sous forme de propriétés du formulaire. Ensuite, près de mon point d'entrée d'application, je lie les valeurs de ces propriétés à la vue. Ensuite, lorsque le conteneur (j'utilise Autofac maintenant) a besoin d'un objet du type de vue (pour le présentateur de la vue), il charge simplement la valeur de la propriété du formulaire. Note latérale: J'utilise également des événements et n'expose plus le présentateur à la vue, pour éliminer le couplage non incendu de la vue sur le présentateur. La vue ne devrait pas savoir qu'il existe un présentateur du tout.