Partager via


Introduction aux propriétés dynamiques (Visual Studio)

Notes

L'interface utilisateur pour les propriétés dynamiques n'est plus disponible dans Visual Studio 2005. Toutefois, les propriétés dynamiques sont encore prises en charge. Si vous importez un projet d'une version antérieure de Visual Studio, les paramètres de propriétés dynamiques seront conservés dans le code et utilisés au moment de l'exécution. Nous vous recommandons d'utiliser à la place le Concepteur de projets pour spécifier les paramètres d'application. Pour plus d'informations, consultez Paramètres, page du Concepteur de projets et Gestion des paramètres de l'application.

Les propriétés dynamiques vous permettent de configurer votre application de telle sorte que tout ou partie de ses valeurs de propriété soient enregistrées dans un fichier de configuration externe plutôt que dans son code compilé. Les administrateurs ont ainsi la possibilité de mettre à jour les valeurs de propriété susceptibles de changer avec le temps, ce qui a pour effet de réduire les coûts de maintenance d'une application après son déploiement. Supposons, par exemple, que vous créez une application utilisant une base de données de test durant son développement et que vous vouliez la déployer en passant à une base de données de production. Si vous enregistrez les valeurs de propriété à l'intérieur de l'application, vous devez modifier manuellement tous les paramètres de la base de données, puis recompiler le code source. Alors que si vous les enregistrez en externe, vous n'aurez qu'à introduire une seule modification dans le fichier externe, et l'application récupérera les nouvelles valeurs lors de sa prochaine exécution.

Note de sécuritéNote de sécurité

Les valeurs de propriétés stockées dans un fichier de configuration ne sont pas sécurisées. Les données sensibles (telles que les mots de passe ou les informations de carte bancaire) ne doivent pas être stockées en tant que propriétés dynamiques.

Vous pouvez utiliser des propriétés dynamiques dans n'importe quelle application se compilant sous la forme d'un fichier .exe. Les projets qui compilent une DLL ne peuvent pas utiliser directement les propriétés dynamiques. En revanche, les propriétés des DLL peuvent être définies dynamiquement par le fichier .exe qui fait référence au fichier .dll. Bien que toutes les propriétés de composant, formulaire ou contrôle de ces applications puissent être gérées dynamiquement, certaines se prêtent mieux à devenir des propriétés dynamiques. Le plus souvent, vous enregistrerez et récupérerez les propriétés qui se connectent à des ressources externes susceptibles de changer avec le temps (bases de données, journaux des événements et compteurs de performance, notamment). Beaucoup de ces propriétés sont identifiées par défaut comme propriétés dynamiques potentielles.

Notes

L'exemple de code de cette rubrique repose sur l'existence d'un objet SqlConnection et d'un fichier de configuration. Sans ceux-ci, il en résultera des erreurs de compilation.

Propriétés dynamiques et fichiers de configuration

Lorsque vous définissez une propriété comme étant configurable, sa valeur est écrite dans un fichier de configuration, et du code est inséré dans la classe pour indiquer que cette valeur doit être récupérée de cette ressource externe. Le fichier de configuration varie en fonction du type de l'application : les applications Web utilisent le fichier Web.config et les applications Windows utilisent un fichier similaire doté de l'extension .config. Tous les formulaires et composants d'une application utilisent un seul et même fichier de configuration. Vous ne pouvez pas utiliser un autre fichier ni plusieurs fichiers pour une même application.

Dans le fichier de configuration, les propriétés sont persistantes à l'aide de XML. Supposez par exemple que vous avez indiqué que la propriété ConnectionString pour une connexion de données devait être enregistrée dans le fichier de configuration. Le code suivant apparaît alors dans l'éditeur de code, indiquant que la valeur est enregistrée en externe :

Me.SqlConnection1.ConnectionString =
  System.Configuration.ConfigurationManager.
  AppSettings.Get("SqlConnection1.ConnectionString")
        this.sqlConnection1.ConnectionString = 
          System.Configuration.ConfigurationManager.
          AppSettings.Get("SqlConnection1.ConnectionString");
Note de sécuritéNote de sécurité

Pour plus d'informations sur la création de connexions de données sécurisées, consultez Protection des informations de connexion (ADO.NET).

Dans le fichier de configuration, la valeur de cette propriété est enregistrée au format XML à l'aide de la clé indiquée dans le code du formulaire :

<configuration>

<appSettings>

<add key="sqlConnection1.ConnectionString" value="data source=myserver;initial catalog=Apps;Integrated Security=SSPI;packet size=4096" />

</appSettings>

</configuration>

À chaque valeur du fichier de configuration est assignée une clé servant à enregistrer et récupérer la valeur. La première partie de cette clé désigne le composant dont la valeur est issue. Par exemple, ces deux clés indiquent une propriété ConnectionString sur deux connexions de données différentes dans une même application :

<configuration>

<appSettings>

<add key="sqlConnection1.ConnectionString" value="data source=myserver;initial catalog=Apps;Integrated Security=SSPI;packet size=4096" />

<add key="sqlConnection2.ConnectionString" value="data source=myserver;initial catalog=Apps;Integrated Security=SSPI;packet size=4096" />

</appSettings>

</configuration>

Vous pouvez modifier directement le fichier de configuration afin de mettre à jour dynamiquement les valeurs de propriété de votre application. À son prochain démarrage, l'application mettra à jour les valeurs.

En un sens, les fichiers de configuration s'apparentent aux fichiers de ressources ; les uns et les autres servent à enregistrer des valeurs à l'extérieur de l'application compilée et enregistrent les informations au format XML. Toutefois, les fichiers de ressources ont une fonction très différente de celle des fichiers de configuration. Les fichiers de ressources servent à enregistrer des chaînes et d'autres ressources localisables se prêtant à la traduction, tandis que les fichiers de configuration (dans le cas des propriétés dynamiques) servent à mettre à jour des valeurs de propriété. Les valeurs contenues dans le fichier de ressources sont destinées à être traduites, mais pas changées sur le fond, tandis que celles des propriétés dynamiques d'un fichier de configuration peuvent être modifiées à votre gré. En outre, si vous pouvez associer plusieurs fichiers de ressources à un projet, vous ne pouvez avoir qu'un seul fichier de configuration pour votre application. Pour plus d'informations sur les fichiers de ressources, consultez Organisation hiérarchique des ressources pour la localisation.

Définition de plusieurs propriétés avec la même clé

Plusieurs propriétés peuvent référencer la même paire clé/valeur d'un fichier de configuration. Par exemple, si votre classe contient trois composants qui ont tous accès à la même base de données, vous pouvez enregistrer la propriété ConnectionString pour chacun d'entre eux dans la même paire clé/valeur. Ainsi, si la base de données vient à changer, vous pouvez appliquer la modification aux trois composants en mettant à jour une seule valeur du fichier de paramètres. Pour ce faire, il suffit de définir chaque propriété avec la même clé, comme dans cet exemple :

Me.SqlConnection1.ConnectionString =
  System.Configuration.ConfigurationManager.
  AppSettings.Get("SqlConnection1.ConnectionString")

Me.SqlConnection2.ConnectionString =
  System.Configuration.ConfigurationManager.
  AppSettings.Get("SqlConnection1.ConnectionString")

Me.SqlConnection3.ConnectionString =
  System.Configuration.ConfigurationManager.
  AppSettings.Get("SqlConnection1.ConnectionString")
        this.sqlConnection1.ConnectionString = 
          System.Configuration.ConfigurationManager.
          AppSettings.Get("SqlConnection1.ConnectionString");

        this.sqlConnection2.ConnectionString = 
          System.Configuration.ConfigurationManager.
          AppSettings.Get("SqlConnection1.ConnectionString"); 

        this.sqlConnection3.ConnectionString = 
          System.Configuration.ConfigurationManager.
          AppSettings.Get("SqlConnection1.ConnectionString"); 

Notez que tandis que les composants utilisés diffèrent, ils font tous référence à la clé de sqlConnection1.ConnectionString.

Lorsque vous sélectionnez la même clé pour plusieurs propriétés, une seule entrée est créée dans le fichier de configuration. La première valeur enregistrée est celle de la première propriété qui s'est vu attribuer cette clé.

Types de données et propriétés dynamiques

Le format XML enregistre tout sous forme de chaînes. Si la valeur de propriété que vous stockez n'est pas une chaîne, des informations complémentaires s'afficheront dans l'éditeur de code pour vous indiquer le type de données de cette valeur. Supposez par exemple que vous enregistrez dynamiquement la valeur des propriétés Interval et Enabled d'un composant Timer. Dans le fichier de configuration, cette propriété sera enregistrée ainsi :

<appSettings>

<add key=timer1.Interval" value="100" />

<add key=timer1.Enabled" value="True" />

</appSettings>

Dans l'éditeur de code, vous verriez ce code pour indiquer que la valeur récupérée doit être changée en Double, type de données (Visual Basic) :

Me.Timer1.Enabled = (New System.Configuration.
AppSettingsReader()).GetValue("timer1.Enabled", GetType(Boolean))

Me.Timer1.Interval = (New System.Configuration.
AppSettingsReader()).GetValue("Timer1.Interval", GetType(Double))
        this.timer1.Enabled = (bool)(new System.Configuration.
          AppSettingsReader().GetValue("timer1.Enabled", typeof(bool)));

        this.timer1.Interval = (System.Double)(new System.Configuration.
          AppSettingsReader().GetValue("timer1.Interval", typeof(System.Double)));

Notes

Il existe deux minuteries, l'une pour les Windows Forms et l'autre pour les applications serveur ; de légères différences en termes de modèle de programmation les distinguent. Cet exemple utilise la minuterie serveur.

Considérations de performances et de sécurité relatives aux propriétés dynamiques

Lorsque vous utilisez les propriétés dynamiques, deux points doivent être pris en considération. Premièrement, l'enregistrement et la récupération d'une propriété dynamique peuvent avoir un impact sur les performances de votre application. La récupération de valeurs de propriété à partir de l'application compilée est légèrement plus rapide que la récupération de valeurs de propriété du fichier de configuration. La première fois que l'application accède à un fichier de configuration, les performances connaissent une légère détérioration pendant que l'application lit le fichier. Cet impact est insignifiant et devrait passer inaperçu. Par la suite, toute récupération de cette propriété ou d'autres aura un impact beaucoup moins important sur les performances (égal à celui de la lecture d'une valeur dans une table de hachage).

Deuxièmement, si vous enregistrez dans un fichier externe des valeurs de propriété, telles que des ID d'utilisateur et des mots de passe, vous pourrez déterminer qui aura accès au fichier et aux valeurs qu'il contient. Pour ce faire, vous pouvez sécuriser votre fichier à l'aide d'une liste de contrôle d'accès (ACL, Access Control List) Windows. Une liste de contrôle d'accès spécifie les opérations que chaque utilisateur est autorisé à effectuer sur tel ou tel fichier ou répertoire. En outre, si vous travaillez avec une application Web, vous pouvez tirer parti de l'option de sécurité intégrée proposée par Windows, les services IIS (Internet Information Services) et SQL Server. Dans ce modèle, les informations d'authentification d'un utilisateur pour le réseau local sont également utilisées pour accéder aux ressources de base de données, et aucun nom d'utilisateur ou mot de passe n'est indiqué dans la chaîne de connexion.

Pour plus d'informations sur la sécurité, consultez votre documentation Windows ou les pages suivantes :

Voir aussi

Autres ressources

Configuration d'applications à l'aide de propriétés dynamiques