2009-07-28 8 views
1

Je cherche en faire un projet dans Silverlight 3 en utilisant Prism et je vraiment l'agrégation de concours complet comme indiqué ici http://development-guides.silverbaylabs.org/Video/Prism-EventingPuis-je utiliser l'agrégation d'événements Ninject pour Prism dans Silverlight?

Toutes les ressources semblent pointer à l'aide de l'unité avec Prism et non Ninject. Dans Ninject, existe-t-il une manière similaire d'agréger les événements? Ou si je veux utiliser Prism je suis limité à Unity?

Répondre

8

Vous avez de la chance ici. L'EventAggregation dans Prism n'est pas une fonction du conteneur Unity, mais quelque chose que Prism place automatiquement dans le conteneur pour les classes client à utiliser. Ainsi, les classes déclarent avoir une dépendance IEventAggregator et une instance de celle-ci est donnée à cette classe via l'injection de dépendance. La chose à emporter ici: c'est autonome.

Ainsi, vous avez plusieurs options.

  1. Si vous n'avez pas besoin des autres caractéristiques de prisme (de modularité des composants, etc.), vous pouvez simplement utiliser Ninject et insérez une instance de la EventAggregator dans votre récipient Ninject pour le reste de votre application à utiliser .

  2. Si vous voulez les autres fonctionnalités de Prism, vous pouvez remplacer l'implémentation du conteneur DI. Je n'ai malheureusement pas trouvé d'exemple concret, mais je pense que tout ce que vous avez à faire est de réimplémenter le type "UnityBootstrapper" de base avec l'un de vos propres "NinjectBootstrapper". Je pense que UnityBootrapper est le seul point où les composants Prism (EventAggregator, RegionManager, etc.) entrent en contact avec Unity (spécifiquement dans l'implémentation de "ConfigureContainer"). Modifier: Je me trompe ici. Vous devez également implémenter IServiceLocator avec une implémentation spécifique à Ninject. Pas grave, cependant.

  3. Embrasser l'unité. C'est un très bon conteneur de DI avec beaucoup de flexibilité. Il n'a pas l'interface fluide que Ninject fait, mais ce n'est certainement pas difficile à utiliser.

  4. Vous pouvez utiliser un autre système de gestion des événements similaire inclus dans MVVMFoundation (http://mvvmfoundation.codeplex.com). C'est ce qu'on appelle le Messenger et il fait à peu près ce que fait l'EventAggregator dans Prism, mais la bibliothèque que vous téléchargez est beaucoup plus légère.

Espérons que ce soit assez d'options pour toi!

+0

Wow, maintenant c'est une réponse complète. Merci beaucoup. Je ne suis pas sûr de la route que je vais prendre. La seule raison pour laquelle je privilégiais ninject sur Unity, c'est que je commence à utiliser Ninject dans certaines applications web et je pensais que ce serait bien d'apprendre un seul produit DI, mais je pourrais donner plus de réflexion à Unity. Merci pour votre contribution! –

+0

Bonne réponse! Avec pt2; vous créer l'implémentation de IServiceLocator. Pourquoi en avez-vous besoin? Et à qui devriez-vous donner votre implémentation? – stiank81

+0

@ stiank81: Il existe divers bits de Prism qui utilisent le "Common Service Locator" pour extraire le conteneur que vous utilisez. Ninject-Contrib a une version pour vous, mais vous pouvez aussi utiliser celle-ci écrite par un camarade qui l'a mis à jour avec la dernière version de Prism: http://sweux.com/blogs/pombeiro/index.php/2009/ 05/14/migrating-ninjectcontribcompositewpf-bootstrapper-à-prism-v2 / –

Questions connexes