2010-01-03 7 views
5

Ich habe eine Winforms-Anwendung, in der einige der Daten in XML-Dateien gespeichert sind. Der Speicherort, an dem diese XML-Dateien gespeichert werden sollen, kann vom Benutzer konfiguriert werden und wird in den AppSettings gespeichert. Alle meine Schichten sind separate Baugruppen. Kann ich von meiner DAL-Baugruppe aus auf meine Einstellungen zugreifen, oder sollte ich dies als Argument durch alle meine Layer leiten? Ein weiteres ProblemVerwendung von Appsettings in der DAL-Schicht

 Configuration config = ConfigurationManager.OpenExeConfiguration(
      System.Reflection.Assembly.GetEntryAssembly().Location); 
     string dataStorageLocation = config.AppSettings["DataStorageLocation"]; 

config.AppSettings [ "DataStorageLocation"] gibt einen Kompilierungsfehler

Wenn ich versuche, die Einstellungen von meiner DAL Schicht zu lesen, ich begegne: System.Configuration.ConfigurationElement.this [System. Configuration.ConfigurationProperty] kann aufgrund seiner Schutzstufe nicht zugegriffen werden. Warum das?

Kann mich jemand auf die richtige Spur bringen? Vielen Dank.

Antwort

8

Sie müssen config.AppSettings.Settings["DataStorageLocation"] verwenden. Siehe the MSDN documentation für eine Probe.

Alternativ und IMHO besser, könnten Sie System.Configuration.ConfigurationManager.AppSettings[name] verwenden, um auf die AppSettings der Host-Anwendung zuzugreifen. Dies ist wahrscheinlich flexibler als Ihre Technik, da es auch funktioniert, wenn Ihre DAL-Assembly beispielsweise in einer Service-Schicht auf IIS gehostet wird. Der direkte Zugriff auf Konfigurationsdaten aus der Konfigurationsdatei der Host-Anwendung auf diese Weise ist vollkommen akzeptabel und im Allgemeinen besser als die Übergabe von Konfigurationsinformationen durch die Ebenen.

+0

Ich bekam den gleichen Fehler..Ich benutze eine benutzerdefinierte Konfigurationsdatei, um auf einen Wert zuzugreifen, der im Abschnitt AppSettings in dieser benutzerdefinierten Konfigurationsdatei definiert wurde, musste ich folgendes verwenden: string val = config.AppSettings.Settings ["OpMode "].Wert. Vielen Dank. – RDV

3

Die AppSettings sind für jede Assembly verfügbar, die vom aufrufenden Prozess geladen wird, so dass Sie keine Probleme haben werden, mit jeder geladenen Assembly darauf zuzugreifen.

+1

+1, um Joes Antwort wirklich vollständig zu machen. Danke, Darien. – Peter

Verwandte Themen