2009-01-07 7 views
3

J'utilise Last Configuration Section Handler You'll Ever Need de Jeff Atwood, mais cela ne semble fonctionner que pour le fichier app.config par défaut. Si je voulais séparer certains paramètres dans un autre fichier, la désérialisation ne fonctionne pas, puisque ConfigurationManager.GetSection lit uniquement à partir du fichier app.config par défaut de l'application. Est-il possible de modifier le chemin du fichier de configuration par défaut ou de configurer ConfigurationManager dans un deuxième fichier de configuration?Puis-je changer le fichier de configuration par défaut?

Répondre

5

oui, il suffit de remplacer la section dans le fichier de configuration par défaut avec un élément XML du même nom qui a un configSource = « » attribut qui pointe vers un autre fichier ...

... Dans an App. config ou web.config ...

<configSections> 
     <section name="Connections" 
     type="BPA.AMP.Configuration.XmlConfigurator, BPA.AMP.Data.Config.DAL"/> 
     <section name="AutoProcessConfig" 
     type="BPA.AMP.Configuration.XmlConfigurator, BPA.AMP.Data.Config.DAL"/> 
    </configSections> 


    <Connections configSource="Config\Connections.config" /> 
    <AutoProcessConfig configSource="Config\AutoProcess.config" /> 

et puis le xml commun, classe Configurator

public class XmlConfigurator : IConfigurationSectionHandler 
    { 
     public object Create(object parent, 
          object configContext, XmlNode section) 
     { 
      XPathNavigator xPN; 
      if (section == null || (xPN = section.CreateNavigator()) == null) 
       return null; 
      // --------------------------------------------------------- 
      Type sectionType = Type.GetType((string)xPN.Evaluate 
            ("string(@configType)")); 
      XmlSerializer xs = new XmlSerializer(sectionType); 
      return xs.Deserialize(new XmlNodeReader(section)); 
     } 
    } 
+0

Bénissez-vous, mon fils. C'est totalement et complètement badass. –

+0

Yr totalement, comme, bienvenue, mec! –

0

Vous pouvez le faire manuellement, en ouvrant le document en tant que XDocument, trouver le approprié section et en passant cela à votre gestionnaire de section de configuration.

XDocument configDoc = XDocument.Load(alternateConfigFile); 

var section = configDoc.Descendants("sectionName").First(); 

var obj = sectionHandler.Create(null, null, section); 
+0

Y a-t-il même besoin de la requête LINQ? Ne devrait-il pas renvoyer exactement les mêmes résultats que 'configDoc.Descendants (" sectionName ")' fait? – bambams

+0

@bamccaig - artefact de quand j'ai commencé à apprendre LINQ, j'ai mis à jour. – tvanfosson

Questions connexes