2010-12-03 4 views
1

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.

Antwort

1

Die Art und Weise, wie ich mich letztendlich darauf eingerichtet habe, verwendet eine Klasse, die 'statisch' ist, aber nicht wirklich definiert ist, weil .Net es nicht erlaubt, statische Typen zu erben. Aber Sie können die Klasse mit allen statischen Elementen schreiben und einen geschützten Konstruktor verwenden, der sie in jeder Hinsicht statisch macht. Dann können Sie von Ihrer externen Projektklasse erben wie:

public class ConfigManager : ExternalProjectNamespace.ConfigManager 

Mit dieser Konvention konnte ich die Syntax ich ohne wollte bekommen Code in jedem einzelnen Projekt zu duplizieren, der den ConfigManager verwenden würde.

Verwandte Themen