(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?
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. –
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 –