2010-04-23 3 views
1

Actuellement, nous utilisons l'enregistrement de programmation des proxies WCF dans le conteneur Windsor en utilisant l'installation d'intégration WCF. Par exemple:Configuration de Castle Windsor XML pour le proxy WCF à l'aide de l'installation d'intégration WCF

container.Register(
    Component.For<CalculatorSoap>() 
     .Named("calculatorSoap") 
     .LifeStyle.Transient 
     .ActAs(new DefaultClientModel 
     { 
     Endpoint = WcfEndpoint.FromConfiguration("CalculatorSoap").LogMessages() 
     } 
    ) 
    ); 

Existe-t-il un moyen de faire la même chose via le fichier de configuration XML de Windsor? Je ne peux pas trouver un échantillon de ceci sur google.

Merci à l'avance

+0

Pourquoi voulez-vous mettre cela dans .config? Le code est la méthode recommandée –

+0

Parce que nous voulons changer une implémentation basée sur l'environnement: implémentation en mémoire pour dev env et proxy WCF pour env. À mon humble avis, config est le moyen le plus approprié pour cela. Actuellement, nous utilisons une solution de contournement - WindsorInstaller personnalisé qui fait la logique if-else. –

+0

Je pense que l'approche 'IWindsorInstaller' est meilleure. Déplacez le nom de l'environnement vers .config, pas les composants. –

Répondre

2

Château WCF dépôt EIF (http://github.com/castleproject/Castle.Facilities.Wcf) contient maintenant échantillon d'enregistrement client WCF à partir du fichier de configuration Windsor:

<?xml version='1.0' encoding='utf-8' ?> 
<configuration> 
<facilities> 
    <facility id='wcf' 
       type='Castle.Facilities.WcfIntegration.WcfFacility, 
        Castle.Facilities.WcfIntegration' /> 
</facilities> 

<components> 
    <component id='calculatorSoap' 
       type='Demo.CalculatorSoap, Demo.UnitTests' 
       wcfEndpointConfiguration='CalculatorSoap'> 
    </component> 
</components> 
</configuration> 

C'est ce que je cherchais. Nous vous remercions de votre aide.

Note: faites attention au style de vie. Dans le cas courant, le proxy WCF doit avoir un mode de vie transitoire à fermer à la libération de l'objet. Bien que le mode de vie par défaut de Windsor soit singleton, dans ce cas, la procuration de la WCF sera fermée lors de l'élimination des contenants.

Cordialement, Andrej

1

En utilisant IWindsorInstaller et faire l'enregistrement par le code est la méthode recommandée. La configuration est pour la configuration (et les scénarios hérités).

Je créerais deux installateurs pour cela et basé sur l'indicateur de compilation utiliser l'un ou l'autre;

var installer = 
#if DEBUG 
new TestingServiceInstaller(); 
#elseif 
new ProductionServiceInstaller(); 
#endif 

container.Install(installer);