2009-03-26 14 views
14

Konfigurationseinstellungen in 3.5 machen mich verrückt ... Hilfe! ;)Abrufen von Konfigurationseinstellungen aus web.config/app.config mithilfe der Klassenbibliothek

Ich habe eine Klassenbibliothek (named ADI), die einige Konfigurationseinstellungen vom Projekt benötigt (wie Connectionstring, Dateisystemstandorte usw.).

Ich möchte diese Einstellungen in meiner Windows Forms/Web Projects App.Config oder Web.Config wie andere Einstellungen definieren.

Hier ist ein Teil meiner app.config für mein Windows Forms-Anwendung:

<applicationSettings> 
    <PhotoImportRobot.My.MySettings> 
     <setting name="ADIImageRoot" serializeAs="String"> 
     <value>C:\DataTemp\ADI\Original\</value> 
     </setting> 
     <setting name="ADIImageVariantsRoot" serializeAs="String"> 
     <value>C:\DataTemp\ADI\Variants\</value> 
     </setting> 
    </PhotoImportRobot.My.MySettings> 
</applicationSettings> 

Wie kann ich Zugriff auf das aus meiner Klasse Bibliothek ??

Ich versuchte dies:

System.Configuration.ConfigurationManager.AppSettings("ADIImageVariantsRoot") 

Was ist zu tun?

Antwort

23

Wenn Sie nicht nach strukturierten Einstellungen, die appSettings Abschnitt dauert nur Schlüssel-Wert-Paare:

<appSettings> 
    <add key="ADIImageRoot" value="C:\DataTemp\ADI\Original\" /> 
    <add key="ADIImageVariantsRoot" value="C:\DataTemp\ADI\Variants\" /> 
</appSettings> 

Dies ermöglicht es Ihnen, sie über das AppSettings Wörterbuch zuzugreifen:

ConfigurationManager.AppSettings["ADIImageVariantsRoot"] 

Wie das würdest du erwarten.

Alternativ können Sie, wenn Sie mehr Struktur für Ihre Konfiguration benötigen (d. H. Mehr als nur Strings oder eine Sammlung von Einstellungen), einen eigenen Konfigurationsabschnitt mit einer ConfigurationSection und den entsprechenden Teilen verwenden.

+1

Ich entschied mich für die Verwendung der alten Appsettings - und das funktioniert. Ich habe auch einen Wrapper geschrieben, um zu prüfen, ob er existiert, und einen Fehler ausgegeben, wenn dies nicht der Fall ist. – Kjensen

+0

Yep - werfen eine ArgumentNullException ist wahrscheinlich der Weg zu gehen, wenn es nicht geliefert wird. –

2

Sie scheinen die Einstellungen zu verwenden, die in Visual Studio integriert sind. Dies erzeugt eine Wrapper-Klasse, die sich auf die Datei bezieht und in Ihrem Fall MySettings heißt.

Sie können also etwas wie MySettings.Instance.ADIImageVariantsRoot schreiben. (Wenn Sie alle Dateien im Projekt Toolbox zeigen klicken, wird es Ihnen die .settings.cs Datei zeigen und Sie können alle blutigen Details sehen)

+1

OP (und ich) möchte wissen, wie man die Einstellung aus der Klassenbibliothek liest. – Tuan

+0

@Code Blue: Danke für Ihre Kommentare. In diesem Fall verschieben Sie die.Einstellungen (und der generierte Code wird folgen) in die Klassenbibliothek, aber stellen Sie sicher, dass die Einstellungen (falls vorhanden) repliziert werden, die in die app.config der Bibliothek in die app.config Ihrer exe gelangen. (Es gibt keine gute Möglichkeit, die Standardwerte automatisch auf externe Projekte zu synchronisieren) –

2

hinzufügen Referenz System.web; Namensraum hinzufügen und Benutzer

using System.Web.Configuration;  

String webConfigValue; 
      webConfigValue = WebConfigurationManager.AppSettings["employeeDB"].ToString(); 

die Web-Konfigurationswert

<appSettings> 
     <add key="employeeDB" value="Data Source=servername;Initial Catalog=employee;Persist Security Info=True;User ID=userid;Password=password;"/>   
</appSettings> 
1

Für Application lesen Sie verwenden sollten:

[YourNamespace].Properties.Settings.Default.[YourSettingName] 

Dies liefert einen stark typisierten Verweis auf Ihre Einstellung und gibt den Standardwert zurück, wenn in der Datei web.config kein Wert definiert ist. Für AppSettings sollten Sie verwenden:

System.Web.Configuration.WebConfigurationManager.AppSettings 
Verwandte Themen