2009-07-10 6 views
1

J'ai le bit suivant du code d'enregistrement:Castle Windsor: Existe-t-il un moyen de remplacer un identifiant de composant?

Component.For<IPublishingService>().ImplementedBy<UseStoredProcedureToPrintService>(), 
Component.For<IConfirmationDialog<AutomatedTransaction>>().ImplementedBy<ShipmentConfirmationDialog>().Named("ShipmentConfirmationDialog"), 
Component.For<IConfirmationService<AutomatedTransaction>>().ImplementedBy<SingleTransactionConfirmation>().ServiceOverrides(
    ServiceOverride.ForKey("shipmentDialog").Eq("ShipmentConfirmationDialog")), 

Une exigence est la ligne que, dans certains cas, l'application est censée se comporter différemment. Je pensais que c'était exactement ce que j'utilisais Castle Windsor pour commencer.

J'ai donc écrit mes nouveaux composants et je les ai d'abord enregistrés. Par exemple, j'implémente IPublishingService différemment et enregistrez d'abord la nouvelle implémentation afin qu'elle soit résolue par rapport à celle par défaut ci-dessus. Cependant, un problème se produit dans les quelques cas où je n'avais pas d'autre choix que d'utiliser un identifiant pour câbler mes remplacements de service. Par exemple comment puis-je rediriger ServiceOverride pour ShipmentConfirmationDialog pour utiliser ma nouvelle implémentation SpecialCaseShipmentConfirmationDialog sans modifier le bit de code ci-dessus?

Il y a toutes sortes de mécanismes dans windsor de château que je ne comprends pas vraiment comme l'expédition et ActAs que j'espère fournir une réponse simple.

Répondre

3

Je le garderais simple. Si c'est configurable, placez-le dans la configuration (web.config/app.config) puis chargez simplement l'ID en utilisant ConfigurationManager.AppSettings["shipmentDialogToUse"];

Rappelez-vous également que l'API d'enregistrement fluide n'est pas l'essentiel de l'inscription. XML a toujours son temps et son endroit où c'est le bon outil pour le travail.

+0

Je pense que c'est l'outil idéal pour le travail lorsque vous devez apporter des modifications à une application déployée. Sinon, mettez simplement toute l'inscription dans les classes Registrar et ajoutez un mécanisme de découverte dynamique simple qui trouve toutes les DLL locales du Registrar. Dans mon cas, j'ai une application qui peut être déployée sur 2 bases de données très différentes, j'ai donc besoin de la déployer avec différentes couches de traduction de modèles et quelques écrans d'interface utilisateur différents. Puisque toute la configuration est au moment du déploiement, je ne vois pas vraiment pourquoi xml config est nécessaire (bien que je le permette aussi). Point pris cependant. Encore trop mauvais, il n'y a pas de mécanisme de dérogation. –

Questions connexes