Comment ajouter des paramètres de configuration personnalisés pour un (ASP)

Depuis sa sortie, les applications et les composants ASP.NET se sont tournés vers le fichier web.config pour charger tous les paramètres dont ils ont besoin pour fonctionner. Cependant, en ajoutant des paramètres personnalisés pour ajouter de la flexibilité et la robustesse à une application ou d'un composant est pas aussi simple que la plupart voudraient. Cet article vous apprend comment écrire les classes nécessaires pour gérer les éléments de configuration XML et utiliser les paramètres qu'ils contiennent dans votre code.







Le .NET Framework fournit une grande variété de paramètres qui peuvent être configurés dans web.config pour modifier le comportement d'un ou plusieurs composants intégrés dans l'application. Pour certains développeurs, coller uniquement avec les paramètres fournis par le .NET Framework est suffisant. Mais beaucoup d'autres développeurs trouvent qu'ils ont besoin de contrôler une collection plus large de paramètres - soit pour les composants (écrits par eux-mêmes ou un tiers), ou tout simplement un ensemble de valeurs qu'ils se trouvent à l'aide tout au long de leur application.

Le fichier web.config ne vous permet de définir des paramètres personnalisés avec le élément, mais il ne permet pas autre chose que de simples paires clé / valeur. L'élément XML suivant est un exemple d'un paramètre contenu dans :

paramètres clé / valeur peut certainement être utile dans de nombreuses circonstances, mais les paramètres sont tout simplement pas assez souples pour les composants robustes ou complexes ou paramètres.

Heureusement, Microsoft permet aux développeurs d'écrire des classes qui ajoutent un accès programmatique aux paramètres de configuration personnalisés contenus dans web.config.

La section de configuration

Une section de configuration est requise de tous les paramètres qui ne figurent pas dans le élément. Il est donc une bonne idée de concevoir la structure XML de vos paramètres de configuration avant d'écrire un code.

La configuration utilisée comme exemple dans ce tutoriel est un composant qui récupère des flux RSS ou Atom. Il ne fait aucun analyse syntaxique, comme cela dépasse le cadre de ce tutoriel. Au lieu de coder en dur la liste des aliments pour récupérer, le composant ressemble à sa configuration pour contenir les noms et les URL des flux pour récupérer. Le composant est appelé FeedRetriever et la structure XML souhaitée de sa configuration ressemble à ceci:

Celles-ci éléments utilisent le nom, url et cache les attributs pour définir certains paramètres pour chaque flux. Bien entendu, les attributs de nom et l'URL sont nécessaires, mais l'attribut cache n'est pas, et devrait par défaut comme vrai.

La configuration ci-dessus est simple. le élément pourrait être modifié pour contenir un autre enfant, appelé , pour contenir les paramètres qui s'appliqueraient à tous les flux. le éléments pourraient également utiliser des attributs supplémentaires, tels que cacheTime et requestFrequency, pour contrôler la durée d'une alimentation est mise en mémoire cache et la fréquence à laquelle il est demandé à l'hôte distant. La seule limite à l'extensibilité et la configurabilité est votre imagination.

La rédaction du gestionnaire de configuration

Les classes basées sur ConfigurationElement représentent des éléments individuels; il est le bloc de construction d'une section de configuration. Types qui dérivent de ConfigurationElementCollection représentent simplement des éléments qui contiennent plus d'un type d'élément. A partir de la configuration ci-dessus, la élément est représenté par une classe qui dérive de ConfigurationElementCollection, et la les éléments sont représentés par une classe à base de ConfigurationElement.

représentant de la Élément

Vous allez commencer avec le élément en le représentant d'une classe appelée FeedElement (dérivé de ConfigurationElement). Cette classe, et à venir des cours relatifs à la configuration, résident dans l'espace de noms FeedRetriever.Configuration.

Toutes les fonctions de l'objet ConfigurationElement comme un indexeur pour sa collection interne de la valeur des propriétés. Il est cette collection interne, ainsi que les attributs .NET, qui vous permet de cartographier la Les attributs de l'élément aux propriétés de la classe FeedElement.

Le code suivant est le code complet pour la classe FeedElement:

La classe ConfigurationElement sert d'indexeur à une collection sous-jacente des propriétés de configuration (d'où la notation indexeur de cette [keyValue]). En utilisant le mot-clé et ce accéder à la propriété sous-jacente avec une clé de chaîne, vous pouvez obtenir et définir la valeur de la propriété sans avoir besoin d'un champ privé pour contenir ces données. Les magasins de collecte de données propriété sous-jacente que le type objet; Par conséquent, vous devez jeter la valeur que le type approprié si vous voulez quelque chose avec elle.

Il existe deux solutions de contournement possibles pour ce problème. La première approche modifie l'expression régulière pour permettre des chaînes vides. La deuxième approche attribue une valeur par défaut à la propriété. Il n'a pas d'importance dans ce cas particulier. Même avec une valeur par défaut, l'attribut URL est encore un attribut obligatoire dans la élément - l'application génère un ConfigurationErrorsException si un élément n'a pas d'attribut url.







Il existe plusieurs autres attributs validateur dans l'espace de noms System.Configuration pour valider les données affectées à des propriétés et des attributs XML à leur carte. Les listes ci-dessous tous les attributs de validateur dans l'espace de noms System.Configuration:

  • CallbackValidatorAttribute - Fournit une association entre un objet CallbackValidator et le code pour valider - permet
    validation dynamique pour une valeur de configuration.
  • IntegerValidatorAttribute - valide en utilisant un objet IntegerValidator pour déterminer si la valeur de configuration se situe dans ou en dehors d'une plage spécifique.
  • LongValidatorAttribute - valide en utilisant un objet LongValidator pour déterminer si la valeur de configuration se situe dans ou en dehors d'une plage spécifique.
  • PositiveTimeSpanValidatorAttribute - en utilisant un objet Valide de PositiveTimeSpanValidator pour les valeurs de configuration de TimeSpan positive.
  • RegexStringValidatorAttribute - en utilisant un objet Valide de RegexStringValidator pour déterminer si la valeur de configuration adhère à la l'expression régulière.
  • StringValidatorAttribute - en utilisant un objet Valide StringValidator pour assurer la valeur de configuration répond à certains critères - tels que la longueur des cordes et des caractères non valides.
  • SubclassTypeValidatorAttribute - en utilisant un objet Valide de SubclassTypeValidator pour déterminer si la valeur de configuration dérive d'un type donné.
  • TimeSpanValidatorAttribute - Valide en utilisant un objet TimeSpanValidator pour déterminer si la valeur de configuration est tombe dans ou à l'extérieur d'une plage spécifique.

À l'exception de la CallbackValidatorAttribute, vous ne devez pas créer des objets validateur correspondant à utiliser conjointement avec les attributs de validateur. Le temps d'exécution .NET crée les objets validateur appropriés pour vous, et les attributs contiennent les paramètres nécessaires pour configurer les objets validateur.

Ce petit morceau de code est tout ce qui est nécessaire pour représenter programme individuel éléments. L'étape suivante consiste à écrire une classe qui représente la élément.

L'écriture d'une classe Collection Element

La représentation XML du élément est celui d'un ensemble d'éléments d'alimentation. De même, la représentation programmatique du élément est une collection d'objets FeedElement. Cette classe, appelée FeedElementCollection, dérive de la classe abstraite ConfigurationElementCollection.

  • CreateNewElement () - Crée un nouvel objet ConfigurationElement (FeedElement dans ce
    Cas).
  • GetElementKey () - Obtient la clé d'élément pour un élément de configuration spécifié (le
    Nom de la propriété des objets FeedElement dans ce cas).

Dans cet esprit, voir le code complet pour la classe FeedElementCollection ci-dessous:

  • AddItemName - Définit le nom du élément de configuration. Par exemple,
    la mise en cela comme « l'alimentation » nécessiterait la les éléments de la
    configuration à modifier à .
  • ClearItemsName - Définit le nom du élément de configuration (utilisé
    pour effacer tous les éléments de la collection).
  • RemoveItemName - Définit le nom du élément de configuration (utilisé
    pour retirer un élément de la collection).

Négliger ces paramètres nommés par défaut en blanc QU'ILS , , .

La rédaction du FeedRetreiverSection classe

La classe finale, appelée FeedRetrieverSection, dérive de ConfigurationSection et représente la élément. C'est la classe la plus simple des classes de configuration, comme la seule exigence, il doit répondre est de fournir un accès programmatique au élément (la FeedElementCollection).

modification web.config

Avec le gestionnaire complet de configuration, vous pouvez ajouter les éléments appropriés à web.config. le section peut aller partout dans le fichier tant qu'il est un descendant direct de l'élément racine ( élément). En le plaçant dans les autres résultats de la section de configuration dans une erreur.

  • Nom - Le nom de l'élément de section de configuration. Dans ce cas, le nom est feedRetriever.
  • Type - Le nom qualifié de la classe associée à la section, et le cas échéant,
    le nom de l'ensemble de la classe se trouve. Dans ce cas, le nom qualifié
    est FeedRetriever.Configuration.FeedRetrieverSection. Si elle se trouve dans un document distinct
    l'assemblage, l'attribut type aurait une valeur de « FeedRetriever.Configuration.FeedRetrieverSection,
    ", où est le nom de l'ensemble
    sans les crochets.

Maintenant votre application est correctement configuré pour utiliser le FeedRetrieverSection, FeedElementCollection et classes FeedElement de vous donner accès programmatique aux paramètres personnalisés contenus dans le section de configuration à web.config. Alors, comment avez-vous accès à ces paramètres à partir de votre code?

Accès aux données de configuration du code

L'espace de noms System.Configuration contient une classe statique appelée ConfigurationManager. Si vous utilisez le section à la maison de vos chaînes de connexion, vous êtes au moins familier avec ConfigurationManager. Il a une méthode appelée GetSection (), qui accepte une chaîne contenant le nom de la section de configuration pour récupérer. Le code suivant illustre ce (en supposant l'aide System.Configuration est en haut du fichier de code):

Procédé GetSection () retourne une valeur de type d'objets, de sorte qu'il doit être coulé à quel type est le gestionnaire de cette section. Ce code récupère la section nommée feedRetriever et jette le résultat comme FeedRetrieverSection. Une fois que vous avez l'objet, vous pouvez commencer à accéder à des données de programmation configuration.

Pour vous donner une idée de la façon dont les paramètres de configuration peuvent être utilisés dans votre composant ou de l'application, le code suivant est une implémentation très basique du composant FeedRetriever.

Une fois que vous récupérez le gestionnaire de section avec GetSection (), vous disposez d'un accès complet aux objets créés à partir de vos classes de gestionnaire. La première ligne de GetFeeds () est un pour chaque boucle qui parcourt tous les objets contenus FeedElement avec l'objet FeedElementCollection retourné par la propriété aliments du bétail. Cela vous donne un accès direct à ces objets FeedElement - le rendant facile d'accéder au nom, URL de chaque flux, et les paramètres du cache.

Au cours de chaque itération de la boucle, la méthode fait une demande en utilisant la propriété Url de l'objet FeedElement. Si les résultats de la requête en un succès, les données de l'alimentation est récupérée et stockée dans la variable feedData. Ensuite, le code vérifie la propriété du cache de l'objet FeedElement pour déterminer si l'alimentation en cache ou non. Mise en cache la l'alimentation consiste à construire un nom de fichier en utilisant la propriété Nom de l'objet FeedElement et la date et l'heure. Ensuite, un objet StreamWriter crée le fichier et écrit les données de l'alimentation à elle.

Comme vous pouvez le voir, en utilisant les classes de gestionnaire de section de configuration est la clé pour la récupération et l'utilisation des paramètres personnalisés résidant dans web.config. Il faut certainement plus de temps et d'efforts de votre part, mais il est certainement beaucoup plus facile votre application ou d'un composant à configurer pour vous-même et d'autres développeurs.

  • Suivez-nous sur Twitter. ou abonnez-vous à la Nettuts + flux RSS pour les meilleurs tutoriels de développement web sur le web.






Articles Liés