2010-03-31 4 views
3

J'utilise le château de Windsor pour IoC et ont la configuration tenue dans le web.config/app.config, en utilisant l'usine suivante:château de Windsor et son propre fichier de configuration

public static TYPE Factory(string component) 
    { 
     var windsorContainer = new WindsorContainer(new XmlInterpreter()); 
     var service = windsorContainer.Resolve<TYPE>(component); 

     if (service == null) 
      throw new ArgumentNullException(string.Format("Unable to find container {0}", component)); 

     return service; 
    } 

et mon web.config qui ressemble à ceci:

<configuration> 
    <configSections> 
    <section name="castle" type="Castle.Windsor.Configuration.AppDomain.CastleSectionHandler, Castle.Windsor"/> 
    </configSections> 
    <castle> 
    <components> 
     <component id="Data" service="Data.IData, Data" type="Data.DataService, Data"/> 
    </components> 
    </castle> 
    <appSettings>....... 

Ce qui fonctionne bien, mais je voudrais placer la configuration de Castle Windsor dans un fichier appelé castle.config. Comment puis-je faire cela?

+0

Notez que vous créez un nouveau conteneur à chaque fois vous devez résoudre un composant. Non seulement c'est ** très ** inefficace, mais vous perdez aussi des fonctionnalités telles que la gestion du style de vie. Au lieu de cela, créez un seul conteneur par application. –

+2

S'il vous plaît dites-moi que vous appelez cette méthode 'Factory' juste une fois par vie de votre application ... –

+0

Il est seulement appelé comme faisant partie du constructeur d'un service WCF, n'est-ce pas? – Coppermill

Répondre

4

WindsorContainer acceptera le nom du fichier de configuration en tant que paramètre de construction:

WindsorContainer publique (string xmlFile)

Résumé: Initialise une nouvelle instance de la classe Castle.Windsor.WindsorContainer en utilisant un fichier xml pour configurer il. Équivalent à l'utilisation des nouvelles WindsorContainer (nouveau XmlInterpreter (xmlFile))

Votre fichier castle.config doit ressembler à ceci:

<?xml version="1.0" encoding="utf-8" ?> 
<configuration> 
    <components> ...