I am trying to create a custom configuration section that represents the following xml structure:
<observerSettings>
<jobSettings>
<filter key="location" value="de">
<filter key="type" value="MyType1">
<filter key="status" value="failed">
<actions>
<notify timespan="12.00:00:00">
<mailSettings>
<mailAddress to="mail1@something.com" />
<mailAddress to="mail2@something.com" />
</mailSettings>
</notify>
<remove timespan="14.00:00:00">
<mailSettings>
<mailAddress to="mail1@something.com" />
<mailAddress to="mail2@something.com" />
</mailSettings>
</remove>
</actions>
</filter>
</filter>
</filter>
</jobSettings>
</observerSettings>
The FilterConfigElement
is defined like this:
internal class FilterConfigElement : ConfigurationElement, IFilterConfigElement
{
[ConfigurationProperty("filter", IsRequired = false)]
public FilterConfigElement ChildFilter => base["filter"] as FilterConfigElement;
[ConfigurationProperty("actions", IsRequired = false)]
public ActionsConfigElement Actions => base["actions"] as ActionsConfigElement;
[ConfigurationProperty("key", IsRequired = true)]
public string Key => base["key"] as string;
[ConfigurationProperty("value", IsRequired = false)]
public string Value => base["value"] as string;
}
When accessing the config section like below, the application is crashing with a StackOverflow
exception:
internal class ObserverSettings : ConfigurationSection, IObserverSettings
{
public static IObserverSettings Instance { get; private set; } = ConfigurationManager.GetSection("observerSettings") as ObserverSettings;
[ConfigurationProperty("jobSettings")]
protected JobSettingsCollection JobSettingsCollection => base["jobSettings"] as JobSettingsCollection;
public virtual IJobSettingsCollection JobSettings => JobSettingsCollection;
}
So I assume ConfigurationManager
is creating this structure with infinite depth and not stopping when the last filter
element is reached. Can this be limited somehow? Is such structure even supported?