Einführung in dynamische Eigenschaften (Visual Studio)

Tipp

Die Benutzeroberfläche für dynamische Eigenschaften wurde aus Visual Studio 2005 entfernt. Dynamische Eigenschaften werden jedoch weiterhin unterstützt. Wenn Sie ein Projekt aus einer früheren Version von Visual Studio importieren, werden die dynamischen Eigenschafteneinstellungen im Code beibehalten und zur Laufzeit verwendet. Es wird empfohlen, dass Sie stattdessen mithilfe des Projekt-Designers Anwendungseinstellungen angeben. Weitere Informationen finden Sie unter Seite "Einstellungen", Projekt-Designer und Verwalten von Anwendungseinstellungen.

Mit dynamischen Eigenschaften können Sie Ihre Anwendung so konfigurieren, dass einige oder alle Eigenschaftswerte statt im kompilierten Code der Anwendung in einer externen Konfigurationsdatei gespeichert werden. Dadurch verringert sich der Verwaltungsaufwand nach der Bereitstellung einer Anwendung, denn die Administratoren können Eigenschaftswerte aktualisieren, die sich im Lauf der Zeit ändern. Beispiel: Stellen Sie sich vor, Sie erstellen eine Anwendung, die während des Entwicklungsprozesses auf eine Testdatenbank zugreift und nach der Bereitstellung mit einer Produktionsdatenbank verbunden sein soll. Wenn Sie die Eigenschaftswerte in der Anwendung speichern, müssen Sie vor der Bereitstellung sämtliche Datenbankeinstellungen manuell ändern und den Quellcode anschließend neu kompilieren. Wenn Sie diese Werte jedoch extern speichern, brauchen Sie nur eine Änderung in der externen Datei vorzunehmen, und die Anwendung ruft bei der nächsten Ausführung die neuen Werte ab.

SicherheitshinweisSicherheitshinweis

In einer Konfigurationsdatei gespeicherte Eigenschaftswerte sind nicht sicher. Vertrauliche Daten (wie Kennwörter oder Kreditkartendaten) sollten nicht als dynamische Eigenschaften gespeichert werden.

Dynamische Eigenschaften können in jeder Anwendung eingesetzt werden, die in eine EXE-Datei kompiliert wird. Projekte, die eine DLL kompilieren, können dynamische Eigenschaften nicht direkt verwenden. DLL-Eigenschaften können jedoch dynamisch von der auf die DLL verweisenden EXE-Datei festgelegt werden. Die Eigenschaften aller Komponenten, Formulare und Steuerelemente in diesen Anwendungen können zwar dynamisch verarbeitet werden, manche Eigenschaften eignen sich jedoch besser als dynamische Eigenschaften. In der Regel werden Sie Eigenschaften speichern und abrufen, die mit veränderlichen externen Ressourcen wie Datenbanken, Ereignisprotokollen oder Leistungsindikatoren verbunden sind. Viele dieser Eigenschaften sind als Standardkandidaten für dynamische Eigenschaften gekennzeichnet.

Tipp

Der Beispielcode in diesem Thema basiert auf dem Vorhandensein eines SqlConnection-Objekts und einer Konfigurationsdatei. Wenn diese nicht vorhanden sind, werden Kompilierungsfehler verursacht.

Dynamische Eigenschaften und Konfigurationsdateien

Wenn Sie die Konfigurierbarkeit einer Eigenschaft festlegen, wird ihr Wert in eine Konfigurationsdatei geschrieben und als Hinweis darauf, dass der Eigenschaftswert aus der externen Ressource abgerufen werden muss, Code in die Klasse eingefügt. Die Konfigurationsdatei richtet sich nach der Art der Anwendung. Für webbasierte Anwendungen wird die Datei Web.config und für Windows-basierte Anwendungen eine ähnliche Datei mit der Erweiterung .config angelegt. Sämtliche Formulare und Komponenten in einer Anwendung beziehen sich auf eine Konfigurationsdatei. Sie können die Konfigurationsdatei nicht wechseln oder mehrere solcher Dateien in einer Anwendung einsetzen.

Innerhalb der Konfigurationsdatei werden die Eigenschaften über XML beibehalten. Beispiel: Wenn Sie angeben, dass die ConnectionString-Eigenschaft für eine Datenverbindung in der Konfigurationsdatei gespeichert werden soll, erscheint im Code-Editor folgender Code als Hinweis, dass der Wert extern gespeichert ist:

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

Weitere Informationen zum Einrichten sicherer Datenverbindungen finden Sie unter Schützen von Verbindungsinformationen (ADO.NET).

Der Wert dieser Eigenschaft würde anhand des im Formularcode angegebenen Schlüssels über XML in der Konfigurationsdatei gespeichert:

<configuration>

<appSettings>

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

</appSettings>

</configuration>

Jedem Wert in der Konfigurationsdatei ist ein Schlüssel zugeordnet, mit dem er gespeichert und abgerufen wird. Der erste Teil des Schlüssels bezeichnet die Komponente, von der der Wert stammt. Beispiel: Die zwei folgenden Schlüssel geben eine ConnectionString-Eigenschaft für zwei unterschiedliche Datenverbindungen in einer Anwendung an:

<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>

Sie können die Konfigurationsdatei direkt bearbeiten, damit die Eigenschaftswerte in der Anwendung dynamisch aktualisiert werden. Beim nächsten Start der Anwendung werden die Werte aktualisiert.

Konfigurationsdateien sind in gewisser Hinsicht mit Ressourcendateien vergleichbar: In beiden Dateitypen werden mithilfe von XML Werte außerhalb der kompilierten Anwendung gespeichert. Ressourcendateien dienen jedoch einem völlig anderen Zweck als Konfigurationsdateien. In Ressourcendateien werden Zeichenfolgen und weitere lokalisierbare Ressourcen für Übersetzungszwecke gespeichert, während Konfigurationsdateien (bei dynamischen Eigenschaften) zum Aktualisieren von Eigenschaftswerten eingesetzt werden. Die Werte in einer Ressourcendatei sollen übersetzt, jedoch in der Regel nicht geändert werden, wohingegen die dynamischen Eigenschaftswerte in einer Konfigurationsdatei nach Bedarf bearbeitet werden können. Außerdem können einem Projekt mehrere Ressourcendateien zugeordnet werden, jedoch nie mehr als eine Konfigurationsdatei. Weitere Informationen zu Ressourcendateien finden Sie unter Hierarchische Organisation der Ressourcen für die Lokalisierung.

Festlegen mehrerer Eigenschaften auf denselben Schlüssel

Mehrere Eigenschaften können sich auf dasselbe Schlüsselwertepaar in einer Konfigurationsdatei beziehen. Beispiel: Wenn in einer Klasse drei Komponenten angelegt sind, die auf dieselbe Datenbank zugreifen, kann die ConnectionString-Eigenschaft für alle drei im selben Schlüsselwertepaar gespeichert werden. Dadurch brauchen Sie bei Änderungen der Datenbank nur einen einzigen Wert in der Einstellungsdatei zu aktualisieren, damit die Änderung von allen drei Komponenten übernommen wird. Stellen Sie dazu die einzelnen Eigenschaften folgendermaßen auf denselben Schlüssel ein:

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"); 

Beachten Sie, dass sich die verwendeten Komponenten trotz ihrer Verschiedenheit alle auf den Schlüssel für sqlConnection1.ConnectionString beziehen.

Wenn Sie denselben Schlüssel für mehrere Eigenschaften wählen, wird in der Konfigurationsdatei nur ein Eintrag vorgenommen. Der Wert der Eigenschaft, der dieser Schlüssel zuerst zugewiesen wurde, wird als Erster gespeichert.

Datentypen und dynamische Eigenschaften

XML speichert alles als Zeichenfolge. Wenn es sich bei dem gespeicherten Eigenschaftswert nicht um eine Zeichenfolge handelt, werden im Code-Editor weitere Angaben zum Datentyp des Eigenschaftswerts angezeigt. Beispiel: Der Wert der Interval-Eigenschaft und der Enabled-Eigenschaft einer Zeitgeberkomponente wird dynamisch gespeichert. Der Eintrag in der Konfigurationsdatei lautet dann folgendermaßen:

<appSettings>

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

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

</appSettings>

Im Code-Editor würde dieser Code angezeigt werden, um darauf hinzuweisen, dass der abgerufene Wert in Double-Datentyp (Visual Basic) geändert werden muss:

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)));

Tipp

Es gibt zwei Zeitgeber, einen für Windows Forms und einen für serverbasierte Anwendungen; deren Programmiermodelle weisen geringfügige Unterschiede auf. In diesem Beispiel wird der serverbasierte Zeitgeber verwendet.

Leistungs- und Sicherheitsaspekte bei dynamischen Eigenschaften

Im Zusammenhang mit dynamischen Eigenschaften sollten Sie zwei Punkte beachten. Erstens: Speichern und Abrufen dynamischer Eigenschaften kann die Leistung ihrer Anwendung beeinträchtigen. Eigenschaftswerte werden innerhalb der kompilierten Anwendung etwas schneller abgerufen als aus einer Konfigurationsdatei. Die Datei wird gelesen, wenn die Anwendung zum ersten Mal auf einen Wert in der Konfigurationsdatei zugreift. Dies hat geringfügigen Leistungsverlust zur Folge. Dieser Verlust ist jedoch unerheblich und sollte unbemerkt bleiben. Nachfolgendes Abrufen dieser oder anderer Eigenschaften wirkt sich wesentlich weniger auf die Leistung aus – wie beim Lesen eines Werts aus einer Hashtabelle.

Zweitens: Wenn Sie Eigenschaftswerte wie Benutzer-IDs und Kennwörter in einer externen Datei speichern, ist es wichtig, die Zugriffsrechte auf diese Datei und die entsprechenden Werte zu steuern. Dazu können Sie die Datei z. B. mit einer Windows-Zugriffssteuerungsliste (Access Control List, ACL) sichern. In einer Zugriffssteuerungsliste wird festgelegt, welche Zugriffsrechte verschiedenen Benutzern auf bestimmte Dateien und Verzeichnisse eingeräumt werden. Wenn Sie mit einer webbasierten Anwendung arbeiten, können Sie außerdem die in Windows integrierte Sicherheitsoption, Internet Information Services (IIS), und SQL Server nutzen. Bei diesem Modell werden die Authentifizierungsinformationen des Benutzers für das lokale Netz auch für den Zugriff auf Datenbankressourcen verwendet. In der Verbindungszeichenfolge wird damit kein expliziter Benutzername oder kein explizites Kennwort benutzt.

Weitere Informationen zu Sicherheitsmaßnahmen finden Sie in der Windows-Dokumentation oder auf folgenden Seiten:

Siehe auch

Weitere Ressourcen

Konfigurieren von Anwendungen mithilfe von dynamischen Eigenschaften