174 votes

Avantages et inconvénients d’appSettings vs applicationSettings (app.config .NET)

Lors du développement d’une Application .NET Windows Forms nous avons le choix entre ceux `` tags pour stocker nos valeurs de configuration. Quel est le meilleur ?

155voto

marc_s Points 321990

La base <appSettings> est plus facile de traiter avec - seulement gifle à un <add key="...." value="..." /> d'entrée et vous avez terminé.

L'inconvénient, c'est: il n'y a pas de vérification de type, par exemple, vous ne pouvez pas supposer que votre numéro que vous vouliez configurer il y a vraiment un nombre - ce que quelqu'un pourrait mettre une chaîne en paramètre en question..... vous venez d'accéder en tant que ConfigurationManager["(key)"] , puis c'est à vous de savoir ce que vous faites affaire avec.

Aussi, au fil du temps, l' <appSettings> peut devenir un peu compliqué et désordonné, si de nombreuses parties de votre application de commencer à mettre des trucs là (rappelez-vous le vieux windows.fichier ini? :-)).

Si vous le pouvez, je préfère, et de recommander à l'aide de vos propres sections de configuration - avec .NET 2.0, il est vraiment devenu assez facile, de Cette façon, vous pouvez:

  • a) Définir vos paramètres de configuration dans le code et de leur type-safe et vérifié
  • b) Vous pouvez séparer proprement VOS paramètres de tout le monde d'autre. Et vous pouvez réutiliser votre config code, trop!

Il y a une série d'articles vraiment bon sur vous pour démystifier l' .NET 2.0 configuration du système sur CodeProject:

  1. Percer les mystères de l' .NET 2.0 configuration

  2. Décoder les mystères de .NET 2.0 configuration

  3. La fissuration des mystères de la .NET 2.0 configuration

Hautement recommandé! Jon Rista a fait un excellent travail en expliquant le système de configuration .NET 2.0.

20voto

Cookey Points 1191

Les paramètres de l'Application peut être contrôlée à partir d'un designer (il y a généralement un des Paramètres.fichier de paramètres par défaut) de sorte que son plus facile à modifier et vous pouvez y accéder par programmation à travers les Paramètres de la classe où ils apparaissent comme un typage fort bien. Vous pouvez aussi avoir de l'application et de l'utilisateur paramètres de niveau, ainsi que les paramètres par défaut de la restauration.

Il est disponible .net 2.0 à partir de, et dénonçait l'autre façon de faire (autant que je puisse en dire).

Plus de détail est donné à: msdn.microsoft.com/en-us/library/k4s6c3a0.aspx

13voto

HAL9000 Points 653

J'ai été en utilisant un modèle que j'ai trouvé un tout à l'arrière où vous utilisez la base de balises xml et d'envelopper les paramètres statique config de classe. - Un BRICOLAGE App.Les paramètres.

DotNetPearls Statique Config Modèle

Si vous faites de cette façon, vous pouvez:

  • l'utilisation de différents ensembles de valeurs de configuration pour les différents environnements (dev, test, prod)
  • prévoir des paramètres par défaut pour chaque paramètre
  • contrôler la façon dont les valeurs sont définies et instancié

C'est fastidieux à mettre en place mais fonctionne bien, les peaux les références à des noms de clé, et est fortement typé. Ce type de modèle fonctionne bien pour la config qui n'est pas modifiée par l'application, bien que vous pourriez probablement de travail dans la prise en charge des modifications.

Config:

<add key="machineName" value="Prod" />
<add key="anotherMachineName" value="Test" />
<add key="EnvTypeDefault" value="Dev" />

<add key="RootURLProd" value="http://domain.com/app/" />
<add key="RootURLTest" value="http://test.domain.com/app/" />
<add key="RootURLDev" value="http://localhost/app/" />

<add key="HumanReadableEnvTypeProd" value="" />
<add key="HumanReadableEnvTypeTest" value="Test Mode" />
<add key="HumanReadableEnvTypeDev" value="Development Mode" />

Config classe:

using System;
using System.Collections.Generic;
using System.Web;
using WebConfig = System.Web.Configuration.WebConfigurationManager;

    public static class Config
    {
        #region Properties

        public static string EnvironmentType { get; private set; }

        public static Uri RootURL { get; private set; }

        public static string HumanReadableEnvType { get; private set; }

        #endregion

        #region CTOR

        /// <summary>
        /// Initializes all settings when the app spins up
        /// </summary>
        static Config()
        {
            // Init all settings here to prevent repeated NameValueCollection lookups
            // Can increase performance on high volume apps

            EnvironmentType =
                WebConfig.AppSettings[System.Environment.MachineName] ??
                "Dev";

            RootURL =
                new Uri(WebConfig.AppSettings["RootURL" + EnvironmentType]);

            HumanReadableEnvType =
                WebConfig.AppSettings["HumanReadableEnvType" + Config.EnvironmentType] ??
                string.Empty;
        }

        #endregion
    }

9voto

Drew Noakes Points 69288

J’aime travailler avec la version la plus simple pour stocker et accéder à des valeurs uniques.

J’ai écrit une classe utilitaire pour accéder aux valeurs d’une manière de type sécurisé qui permet pour les valeurs par défaut. Si les valeurs par défaut ne sont pas fournis, messages d’exception utiles sont donnés.

Vous pouvez voir/télécharger la classe ici :

http://www.drewnoakes.com/code/util/App-Settings-util/

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X