2009-06-22 4 views
1

(NOTE: J'ai mis à jour cette question de l'enquête initiale sur les conteneurs enfants vers la création de composants sur demande)Windsor.Castle: Création de composants à la demande + informations contextuelles

Voici mon problème de conception: Je suis utiliser le conteneur Windsor pour le flux de production principal de l'application, mais j'ai certaines actions à créer à la demande (par exemple, lorsque l'utilisateur clique sur un élément de menu). Je veux que ces actions soient auto-câblées avec des informations de contexte (par exemple, l'action DeletePointsAction devrait obtenir une liste de points à supprimer dans le constructeur). Au début, je pensais avoir une sorte de mini-IoC qui serait constamment mis à jour avec de telles informations de contexte et ensuite utilisé pour le câblage et je me demandais si les conteneurs pour enfants pouvaient faire l'affaire.

Mais après avoir lu un peu plus sur les conteneurs enfants et pensant que mon problème à travers, je l'ai maintenant trouvé une solution qui semble mieux (au moins au premier coup d'oeil): garder un Dictionary avec ces informations de contexte et en utilisant ce dictionnaire lors de la création d'actions à partir du conteneur Windsor. Le seul inconvénient que je vois maintenant est que les noms des clés dans le dictionnaire doivent toujours correspondre aux noms des paramètres du constructeur pour les actions.

L'alternative est d'écrire mon propre custom dependency resolver qui serait assez intelligent pour comprendre les dépendances en fonction du type de valeur du dictionnaire et pas nécessairement son nom clé. Cependant, je ne suis pas sûr de la quantité de travail que cela représenterait.

Des idées/expériences sur ce sujet?

Répondre

1

ISubDependencyResolver ne semble pas représenter beaucoup de travail. Je pense que tout dépend trop des spécificités de votre conception et de votre situation pour donner une réponse générique. Mon conseil est, essayez le résolveur avec quelques-uns des scénarios les plus compliqués que vous allez rencontrer et voyez comment cela fonctionne pour vous. La bonne nouvelle, c'est que si vous cachez les détails derrière le conteneur, vous pourrez plus tard passer à une autre solution, si vous trouvez que celle-ci ne correspond pas à vos besoins.

+0

Krzysztof, rien de spécifique - Je veux juste pouvoir résoudre une dépendance en utilisant les composants enregistrés du conteneur principal + les valeurs données à partir d'un sous-conteneur "léger" (ou simplement un dictionnaire). De préférence, en étendant simplement le comportement de résolution, je n'ai pas besoin d'écrire tout le résolveur à partir de rien :). Je vais étudier ISubDependencyResolver, comme vous le suggérez. –

+0

Cool. Vous devriez bloguer votre expérience avec elle, et si vous trouvez des idées qui, selon vous, correspondraient à l'utilisation générale de Windsor, mettez-la comme suggestion à http://castle.uservoice.com –

Questions connexes