Laden der ApplicationSettings Werte

29/01/2009 - 15:22 von Andre | Report spam
Hallo zusammen,
ich bin gerade dabei ein kleines Config Tool zu schreiben, das die
Web.config/App.Config mehrer Tools verwalten kann.

Im große und ganzen scheint es derzeit auch zu funktionieren, jedoch bin ich
gerade auf ein Problem gestoßen für das ich noch keine Lösung gefunden habe.

Zu meinem Problem:
Beim Starten des Tools wird eine DLL ausgewàhlt und diese im Anschluss über
Reflection geladen:

System.Reflection.Assembly assembly =
System.Reflection.Assembly.LoadFile(strAss);

Type[] Types = assembly.GetTypes();

foreach (Type type in Types)
{
if (type.GetInterface(typeof(IConfiguration).FullName)
== null)
continue; // Kein Interface für den Windows Service

if (type.GetConstructor(new Type[] { typeof(string) })
== null)
continue; // Kein Standard Konsturktor vorhanden

IConfiguration service =
(IConfiguration)type.InvokeMember("ctor",
System.Reflection.BindingFlags.CreateInstance, null, null, new object[] {
new System.IO.FileInfo(strAss).DirectoryName });


CustomClass customClass = new CustomClass();

foreach (string KeyName in service.AppSettings.AllKeys)
{
Type propType;
if (service.AppSettings[KeyName].ToLower() == "true"
|| service.AppSettings[KeyName].ToLower() == "false")
{
propType = typeof(System.Boolean);
}
else
{
propType = typeof(System.String);
}

customClass.AddProperty(KeyName,
service.AppSettings[KeyName],
KeyName, "AppSettings", propType, false, false);
}

service.Properties.Initialize(new
System.Configuration.SettingsContext(), new
System.Configuration.SettingsPropertyCollection(), new
System.Configuration.SettingsProviderCollection());

pgConfigNet1.SelectedObject = customClass;
pgConfigNet1.Tag = service;
pgConfigNet2.SelectedObject = service.Properties;
pgConfigNet2.Tag = service;
}
}

Die Werte werden dann in den beiden Property Grids angezeigt.

Jedoch habe ich mit service.Properties ein kleines Problem.
Hier sind immer die Standard Werte vorhanden und nicht die Werte die ich im
Tool selbst habe.

In der Web.Config steht z.B. für DefaultLanguage der Wert 1031, jedoch habe
ich bei der Ausführung der Config Anwendung immer nur den Wert 1033
(vermutlich von den Standard Werten).

[global::System.Configuration.ApplicationScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("1033")]
public string DefaultLanguage {
get {
return ((string)(this["DefaultLanguage"]));
}

}

Nun ist die Frage:
Wie kann ich Properties so initalisieren, das ich nicht Standard Werte
geladen werden, sondern die Werte die in der Konfig stehen (den Pfad dahin
habe ich auch)

Hat jemand eine Idee?

Vielen Dank,
Andre
 

Lesen sie die antworten

#1 Frank Dzaebel
30/01/2009 - 09:45 | Warnen spam
Hallo Andre,

(1)
Wie kann ich Properties so initalisieren, das ich nicht Standard Werte
geladen werden, sondern die Werte die in der Konfig stehen (den Pfad
dahin habe ich auch)

(2) Erst einmal danke, damit kann in ich die AppSettings anders laden und
muss es nicht selbst parsen.
Ich komme jedoch nicht an die Properties.Settings über Configuration dran
sehe ich das richtig?



Was meinst Du mit herankommen? Hier ein
paar Beispiele, wie man an sie "herankommt":

Properties.Settings props = Properties.Settings.Default;
SettingsPropertyCollection pcol = props.Properties;
SettingsPropertyValueCollection vals = props.PropertyValues;
StringBuilder sb = new StringBuilder();
foreach (SettingsProperty sprop in props.Properties)
sb.Append(sprop.Name + "=" + vals[sprop.Name].
PropertyValue.ToString()+"");
MessageBox.Show(sb.ToString());

Weiterhin natürlich auch, wenn Du in der UserAppSettingsProvider
Klasse die Methoden anschaust, bzw. ggf. neue schreibst, ich
erschliesse aus Deinen Ausführungen nicht, was Du zusàtzlich benötigst.




[...] Hier sind immer die Standard Werte vorhanden [...]



Könnte zum Beispiel im UserAppSettingsProvider bei
UsingDefaultValue Abfrage anpassen:

[SettingsPropertyValue.UsingDefaultValue-Eigenschaft (System.Configuration)]
http://msdn.microsoft.com/de-de/lib...value.aspx




Wenn ja gibt es da eine möglichkeit, diese entrechend zu laden?



Die "props.Reload();" Methode zum Beispiel.


ciao Frank
Dipl.Inf. Frank Dzaebel [MCP/MVP C#]
http://Dzaebel.NET

Ähnliche fragen