Dans les applications .Net, nous voyons souvent que les projets de projet générés par VS pour nous contiendront des fichiers tels que App.config ou Web.config. Ce fichier est ce que nous appelons le fichier de configuration de l'application. Ce fichier décrit certaines informations liées à notre application, telles que la connexion à la base de données, le mode d'authentification, etc. Dans le programme, nous pouvons utiliser la propriété ConnectionStrings de ConfigurationManager pour obtenir facilement les informations sur la chaîne de connexion à la base de données dans le fichier de configuration.
Mais parfois, nous devons l'étendre et ajouter des éléments personnalisés au lieu de simplement utiliser la configuration par défaut. Par exemple, nous pouvons avoir besoin de charger dynamiquement une classe et de l'initialiser au démarrage du programme, mais cette classe ou ces données d'initialisation nous sont inconnues lors de la conception du programme. Je pense que tout le monde a rencontré un tel problème, je ne vais donc pas trop l'expliquer ici. La meilleure façon est d'écrire ces éléments susceptibles de changer dans le fichier de configuration. Lorsque vous êtes sûr, il vous suffit de modifier le fichier de configuration, au lieu de prendre 30 secondes pour ouvrir VS lorsque le produit est sur le point d'être mis en ligne. le code.
L'ajout de certains éléments personnalisés à un fichier de configuration est simple et ne prend que deux étapes :
1. Enregistrez le nom du nœud que vous souhaitez définir et le gestionnaire de section de configuration utilisé pour traiter le nœud dans le nœud <configSections>. Le code est le suivant :
1 <configSections>2 <section name="dbFactory" type="DbFactory.Configuration.DbFactorySection,DbFactory.Configuration"/>3 </configSections>
2. Ajoutez des nœuds personnalisés aux emplacements appropriés. Le code est le suivant :
1 <configSections> 2 <section name="dbFactory" type="DbFactory.Configuration.DbFactorySection,DbFactory.Configuration"/> 3 </configSections> 4 <dbFactory> 5 <default factory="sql"></default> 6 <factorys> 7 <add name="sql" assembly="Hello.Data" class="SqlDbFactory" /> 8 <add name="oracle" assembly="Hello.Data" class="OracleDbFactory" /> 9 </ usines>10 </dbFactory>
Le nœud personnalisé a été ajouté, mais comment obtenir ces informations de configuration dans le programme ? Je pense que beaucoup d'entre vous sont des experts dans l'art de jouer avec XML si vous utilisez certaines classes sous System. C'est effectivement le cas. Le maître est effectivement un maître, je l'admire vraiment. Mais si cela est mis en œuvre de cette manière, je n’ai vraiment pas besoin d’écrire ce billet de blog.
Le framework .Net implémente de nombreuses API de configuration pour nous permettre de simplifier nos opérations sur les fichiers de configuration. Dans la première étape, nous avons mentionné le gestionnaire de section de configuration, qui est utilisé pour lire et écrire nos informations de nœud personnalisées. Alors, comment implémenter un gestionnaire de section de configuration ? Tout d’abord, jetons un coup d’œil aux classes et concepts associés.
ConfigurationSection : les nœuds personnalisés doivent hériter de cette classe pour fournir un traitement personnalisé et un accès par programmation à la section de configuration personnalisée.
ConfigurationElement : il représente un élément dans le fichier de configuration.
ConfigurationElementCollection : il représente un élément de configuration qui contient une collection d'éléments enfants.
Avec ces classes, nous pouvons résumer qu'il existe deux types d'éléments de configuration dans le fichier de configuration.
Premièrement, un élément de configuration unique est un élément qui hérite de ConfigurationElement et ne contient aucun élément enfant.
Deuxièmement, l'élément de configuration de collection est un élément hérité de ConfigurationElementCollection, qui contient une collection d'éléments enfants.
Les concepts sont souvent relativement abstraits. Pour comprendre ces choses, nous devons les expliquer en détail à partir des exemples que nous avons donnés ci-dessus.
Il y a deux éléments dans la section de configuration <dbFactory>, à savoir <default> et <factorys>, et l'élément <factorys> contient deux sous-éléments. Donc ici <default> est un élément de configuration unique, et <factorys> est un élément de configuration de collection. Nous devons implémenter respectivement les classes et leurs propriétés correspondant à ces éléments.
Élément <default> : il s'agit d'un élément de type unique, nous héritons donc de ConfigurationElement. Il y a un attribut factory dans cet élément, nous le définissons donc en conséquence dans la classe. Le code est le suivant :
code
public class DefaultElement : ConfigurationElement { [ConfigurationProperty("factory")] public string Factory { get { return this["factory"] as string } set { this["factory"] = valeur ;
Remarque : Nous devons enregistrer l'attribut ConfigurationProperty de la propriété au-dessus de la définition de la propriété.
Éléments enfants <factorys> :
code
public class FactoryElement : ConfigurationElement { [ConfigurationProperty( "name" )] public string Name { get { return this["name"] as string; } set { this["name"] = value } } [ConfigurationProperty("assembly" )] public string Assembly { get { return this["assembly"] as string; } set { this["assembly"] = value; } } [ConfigurationProperty("class")] public string Class { get { return this[" class"] sous forme de chaîne ; } set { this["class"] = valeur; } } }
L'élément <factorys> est un élément de collection et hérite de ConfigurationElementCollection.
code
public class FactoryElements : ConfigurationElementCollection { protected override ConfigurationElement CreateNewElement() { return new FactoryElement(); } protected override object GetElementKey( ConfigurationElement element ) { return ((FactoryElement)element).Name } public FactoryElement this[string name] { get { renvoie BaseGet( nom ) en tant que FactoryElement ;
La classe ConfigurationElementCollection est une classe abstraite et vous devez implémenter explicitement ses méthodes CreateNewElement et GetElementKey.
Nœud <dbFactory>, hérité de ConfigurationSection
code
public class DbFactorySection : ConfigurationSection { [ConfigurationProperty("default")] public DefaultElement DefaultFactory { get { return this["default"] as DefaultElement; } set { this["default"] = value; )] public FactoryElements Factorys { get { return this["factorys"] as FactoryElements } set { this["factorys"] = valeur;
Le gestionnaire de la section de configuration est enfin terminé. Mettez ces quatre classes dans le même répertoire de projet et compilez-les dans une DLL. Lorsque vous avez besoin d'obtenir des informations de configuration, référencez cette DLL et utilisez la section DbFactorySection = ConfigurationManager.GetSection( "dbFactory" ) comme DbFactorySection ; Essayez-la ?