Wenn Sie eigene ConfigurationElementCollection-Ableitungen implementieren, müssen Sie die GetElementKey-Methode überschreiben, die einen Schlüssel liefert, über den das angegebene ConfigurationElement-Objekt aus der Auflistung abgerufen werden kann. Meistens entsteht dabei Code, der dem Folgenden Beispiel ähnlich sein könnte…
using System.Configuration;
...
protected override object GetElementKey(ConfigurationElement element)
{
CustomConfigurationElement elt;
if ((elt = element as CustomConfigurationElement) != null)
return elt.Key;
return null;
}
Da ich in den meisten meiner Projekten stehts verschiedenste ConfigurationCollection-Klassen entstehen und ich Redundanzen gern vermeiden möchte, nutze ich eine Extension-Methode, um den Code zum Abrufen des Schlüssels nicht immer wieder erneut schreiben zu müssen.
public static object GetKey(this ConfigurationElement element)
{
Type t = element.GetType();
PropertyInfo[] props = t.GetProperties();
foreach (PropertyInfo prop in props)
{
ConfigurationPropertyAttribute cpa;
if ((cpa = prop.GetAttribute<ConfigurationPropertyAttribute>(true)) != null)
{
if (cpa.IsKey)
return prop.GetValue(element, null);
}
}
return null;
}
Damit sieht meine GetElementKey-Implementierung der Auflistung so aus…
...
protected override object GetElementKey(ConfigurationElement element)
{
return element.GetKey();
}
...
