2010-03-30 6 views
0

J'ai une application de service WCF qui utilise un composant appelé EnvironmentConfiguration qui contient des informations de configuration pour mon application. Je convertis ce service afin qu'il puisse être utilisé par différentes applications ayant des exigences de configuration différentes.Comment résoudre les dépendances basées sur des données de contexte transitoires à l'aide de Castle Windsor?

Je veux identifier la configuration à utiliser en permettant un paramètre supplémentaire à transmettre à l'appel de service c.-à-

public void DoSomething(string originalParameter, string callingApplication) 

Quelle est la méthode recommandée pour modifier le comportement de la classe EnvironmentConfiguration sur la base des données transitoires (callingApplication) sans avoir à passer la variable callingApplication à toutes les méthodes de composant qui ont besoin d'informations de configuration?

+0

Donnez-nous plus de contexte. D'où vient le 'callingApplication'? Comment est-il utilisé, etc –

+0

OK, donc j'ai un outil de téléchargement de documents qui est utilisé pour télécharger des documents sur SharePoint. Cela appelle un service WCF transmettant le document et certaines métadonnées. Les métadonnées incluent les propriétés SubApplication et UserName. L'API SharePoint inclut un objet appelé SPWeb. Cet objet SPWeb est transmis à certains de nos composants en utilisant l'injection de constructeur. SPWeb prend en charge une méthode d'emprunt d'identité. Je souhaite donc utiliser le paramètre UserName transmis en tant qu'information contextuelle. Le problème est que je n'ai pas cette information de contexte quand j'enregistre mes autres composants standard. –

+0

De même, je souhaite avoir différentes informations de configuration (c'est-à-dire le site de fin de partage) en fonction du paramètre SubApplication qui n'est disponible que lorsque la requête est effectuée. –

Répondre

0

Il semble que vous souhaitiez rendre votre service multi-locataire. Jetez un oeil à this article about Windsor and multi-tenancy. Passer un paramètre "callingApplication" n'est pas le meilleur moyen de le faire. Identifiez votre application appelante en utilisant quelque chose comme un certificat SSL, un en-tête HTTP personnalisé (en supposant que vous utilisez des points de terminaison HTTP), etc.

+0

Merci pour le lien, il y a beaucoup d'informations utiles là-dedans. Cependant, je souhaite que le comportement soit affecté par les paramètres d'entrée plutôt que d'utiliser des en-têtes HTTP par exemple. IHandlerSelector semble intéressant mais comment puis-je avoir accès aux données transitoires pour affecter le comportement du sélecteur? –

+0

De l'article j'ai lié ci-dessus: "Une application multi-tenanted ne devrait pas ressembler à une application multi-tenanted". Si vous commencez à faire passer des chaînes comme ça, vous casserez cette règle simple et les choses deviendront inutilement compliquées. Par conséquent, je recommande fortement de ne pas le faire. –

+0

Merci, je comprends ce que vous dites mais pour cette instance, j'ai vraiment besoin de transmettre les informations en tant que paramètres d'entrée (faites-moi confiance :)). J'ajouterai un peu plus de contexte au post de Kozmic ci-dessus. –