Ich möchte eine einheitliche Konfigurationsklasse erstellen, die die Einstellungen in mehreren Anwendungen zusammenfasst, die in der Application Settings Architecture (ASA) von Visual Studio vorhanden sind. (http://msdn.microsoft.com/en-us/library/8eyb2ct1.aspx)C# Typ Verfügbarkeit - Verwenden von Anwendungseinstellungen Architektur übergreifend - stark typisierte Konfiguration
Die ASA generiert eine Settings.Designer.cs-Klasse für jedes Projekt. Ich möchte alle Einstellungsklassen mehrerer Projekte zusammenfassen, um von einer Klasse verfügbar zu sein. Zum Beispiel habe ich ein Projekt, das nur verwendet wird, um gemeinsame Einstellungen zu speichern, und das war's. Dieses Projekt hat eine Klasse wie:
public static class ConfigManager
{
public static TopNamespace.Configuration.Properties.Settings Shared
{
get { return TopNamespace.Configuration.Properties.Settings.Default; }
}
}
Dies ermöglicht es mir Config zugreifen wie:
ConfigManager.Shared.ConfigKey
Was ich mag diese ConfigManager Klasse zu tun ist, erweitert mir Zugang zu den generierten Einstellungen Klassen geben von anderen Projekten. Ich bin mir nicht sicher, ob das möglich ist oder wie man das macht. Zum Beispiel würde Ich mag Lage sein zu tun: mich Verweise auf die Anwendungsprojekte aus dem Configuration Projekt
ConfigManager.ApplicationName.ConfigKey
ConfigManager.OtherApplicationName.ConfigKey
Rund Referenzen verhindern Hinzufügen Zugang zu den Typen zu bekommen, um mehr Mitglieder wie zu machen:
public static class ConfigManager
{
public static TopNamespace.Configuration.Properties.Settings ApplicationName
{
get { return TopNamespace.ApplicationName.Properties.Settings.Default; }
}
public static TopNamespace.Configuration.Properties.Settings OtherApplicationName
{
get { return TopNamespace.OtherApplicationName.Properties.Settings.Default; }
}
}
Und dann versuchen, einen Verweis auf das Konfigurationsprojekt zurück von den Anwendungsprojekten hinzuzufügen, um Zugriff auf die ConfigManager-Klasse zu erhalten.
Ich dachte über die Erweiterung der Klassen, aber partielle Klassen funktionieren nicht über Baugruppen und Sie können nicht von statischen Klassen erben. Die Verwendung von Generika scheint keine sehr gute Lösung zu sein, da Sie für die Eigenschaftsmitglieder keine sauberen ConfigManager.ApplicationName.SettingName-Signaturen haben könnten.
Gibt es eine Möglichkeit, Vererbung zu verwenden oder eine dynamische Untersuchung verfügbarer Typen in der Anwendungsdomäne durchzuführen und die Einstellungstypen für verfügbare Anwendungen zu laden, die in einer einzigen ConfigManager-Klasse zur Verfügung gestellt werden? Alle Einstellungsklassen für mehrere von Visual Studio erstellte Projekte aus einer einzigen Manager-Klasse mit Eigenschaften für jede Projekteinstellungen-Instanz verfügbar machen.