2010-05-19 5 views
1

L'application stocke les données de configuration dans la section personnalisée du fichier de configuration. Cette information est utilisée partout dans l'application.Lecture du fichier de configuration. Meilleure pratique

De nos jours, j'utilise la classe aide statique pour fournir un accès comme celui-ci (un code omis ou simplifié):

[XmlRoot("webSiteSection")] 
public class WebSiteConfig : IConfigurationSectionHandler 
{ 

    public static WebSiteConfig Current 
    { 
     get 
     {   
      if (_current == null) 
       _current = (WebSiteConfig) ConfigurationManager.GetSection("webSiteSection"); 

      return _current; 
    } 
    } 

    [XmlElement("section1")] 
    public Section1 Section1 { get; set; } 

    [XmlElement("section2")] 
    public Section2 Section2 { get; set; } 

    ... 

    public object Create(object parent, object configContext, XmlNode section) 
    { 
     var serializer = new XmlSerializer(typeof(WebSiteConfig)); 
     return serializer.Deserialize(new XmlNodeReader(section)); 
    } 
} 

Puis-je utiliser comme ça

<%: WebSiteConfig.Current.Section1.Value1 %> 
<%: WebSiteConfig.Current.Section1.Value2 %> 

Que pensez-vous de celui-ci ? Je le trouve utilisable car il garde le code simple, mais aussi confus car IConfigurationSectionHandler est obsolète depuis .NET Framework 2.0

Répondre

1

Eh bien, en principe, je ne vois rien de mal avec le concept.

Une implémentation plus gérable peut être d'implémenter un accesseur d'instance statique par défaut dans votre section de configuration et l'utiliser.

+0

Désolé, j'ai déjà un accesseur d'instance statique (Current). Est-ce ce que vous avez mentionné? –

+0

@Andrew - alors faites-le. Je suis hors de mon jeu ce soir manquant l'évidence. Ok, alors oui, je ne vois rien de mal dans la façon dont vous le faites, je fais la même chose avec mes ConfigurationSections. –

+0

Ok. Que pensez-vous des classes de sections de configuration personnalisées proposées par Franci Penov? –

2
+0

Hmm, intéressant :) Je vais essayer de refactoriser –

+0

Eh bien, j'ai finalement décidé de ne pas refactoriser car je vais devoir mettre en œuvre autant de propriétés. Les avantages de la validation ne sont pas si remarquables par rapport aux autoproperties en approche que j'utilise ces jours-ci. –

+0

C'est votre choix à faire. Toutefois, IConfigurationSectionHandler est obsolète comme vous l'avez noté vous-même et pourrait être supprimé dans les futures versions du framework .Net. Je suis d'accord que s'inquiéter maintenant de quelque chose qui pourrait casser dans une année peut sembler un peu excessif, mais si vous commencez à utiliser ce modèle comme beaucoup plus haut, vous finirez dans un état où vous devrez le changer finalement. Je ferais mieux de le faire maintenant. –

Questions connexes