Delphi: Ist es möglich, alle Instanzen eines Datensatzes (~ typisierte Konstanten) im globalen Namespace aufzulisten?

8

Aus den bisherigen Recherchen rate ich schon, dass die Antwort nein ist, nur um sicher zu gehen ... (auch dieser Eintrag kann aktualisiert werden, sobald die Unterstützung für ist verfügbar).

Der Fragetitel sollte bereits autark sein, denke ich, aber FWIW, was ich versuche, ist folgendes: Ich habe ein Konfigurationsframework, das um Datensatzkonstanten aufgebaut ist: Jede in meiner App verfügbare Konfigurationsoption ist an einer zentralen Stelle definiert in Form einer typisierten Konstante, die den Namen des Registrierungsschlüssels (oder INI-Schlüssels), seinen Datentyp und seinen Standardwert enthält. Diese Konstanten übergebe ich an die Accessor-Methoden in meinem Framework, die dann die notwendige Logik zum Abrufen und Speichern der Optionswerte implementieren.

Ich möchte nun die Informationen in diesen Datensätzen auch auf Metadaten erweitern, die ich zur automatischen Generierung von ADM / ADMX-Dateien ( ifdef 'in den Versions-Builds) verwenden kann, um diese Optionen zu beschreiben.

Aber dazu müsste ich in der Lage sein, diese Konstanten aufzulisten, es sei denn, ich füge einen expliziten Registrierungsmechanismus hinzu, der wie unnötige Duplizierung aussieht.

Idealerweise hätte ich die Metainformationen lieber in Form von Attributen deklariert, anstatt sie dem Datensatztyp hinzuzufügen, aber diese können (noch?) nicht auf Konstanten angewendet werden. Dies würde auch nichts an der Notwendigkeit ändern, die Konstanten an erster Stelle aufzuzählen.

Angenommen, dies ist derzeit nicht über RTTI möglich, werde ich wahrscheinlich in Erwägung ziehen, die Metadaten in Kommentare zu schreiben und sie irgendwie zu analysieren. Das wird wahrscheinlich eine andere Frage hier sein.

[Plattform-Info: derzeit mit Delphi 2010, aber ich habe bereits eine XE-Lizenz - hatte einfach noch keine Zeit, es zu installieren]

    
Oliver Giesen 18.05.2011, 08:37
quelle

1 Antwort

4

Lange Antwort wird kommen ....: -)

Anstatt zu versuchen, globale Konstanten aufzuzählen, möchten Sie vielleicht einen anderen Ansatz als das, was Sie gerade tun, ausprobieren.

Vor einiger Zeit hatte Robert Love eine sehr interessante Idee. Er verwendet benutzerdefinierte Attribute und RTTI, um anzugeben, wie Werte aus einer INI-Datei gespeichert und abgerufen werden sollen.

In seinem Blog hat er eine großartige Erklärung, wie es funktioniert:

Ссылка

Ich habe das im folgenden Code etwas erweitert:

  • Sie können jetzt andere Typen als nur Strings verwenden (string, integer, double, boolean).
  • Sie können in Ihren Attributen einen Standardwert angeben.
  • Es gibt eine Basiseinstellungen-Klasse, von der geerbt werden kann. Sie können hier einen Dateinamen für das Inifile festlegen, und es lädt und speichert für Sie.
  • Base AppSettings-Klasse .. TAppSettings speichert Einstellungen automatisch in einer Datei in folgendem Format: <yourappname>.config.ini

Beispiel ... Wenn ich Datenbankeinstellungen in einer INI-Datei speichern lassen möchte, muss ich nur TDbSettings instanziieren. Sie müssen nicht wissen, wie oder wo die Werte tatsächlich gespeichert werden, und der Zugriff ist wirklich schnell.

%Vor%

Wenn Sie einen neuen Satz von Einstellungen festlegen möchten, ist es wirklich einfach.

%Vor%

Das ist so viel sauberer, als direkt ein Inifile zu lesen und zu schreiben. Robert, wenn du das liest: Danke, dass du mir das Leben viel leichter gemacht hast!

Hier ist der aktualisierte Code:

%Vor%     
Wouter van Nifterick 26.05.2011 22:48
quelle

Tags und Links