使用.NET创建可自定义的配置

我正在尝试创建一些类似于以下代码段的类型配置...
<logging application="Global Application Name">
    <defaultLogger name="default" genericOption="XXX" specificOptionYYY="yyy" />
    <defaultLogger name="notAsDefault" genericOption="AAA" specificOptionYYY="bbb" />
    <anotherDefaultLogger name="anotherDefault" genericOption="ZZZ" specificOptionWWW="www" />
</logging>
根目录是一个LoggerSettings类,它包含
application
属性和
LoggingConfigurationElement
s的集合。 LoggingConfigurationElement将包含
genericOption
属性。 然后将创建两个包含
specificOptionYYY
specificOptionWWW
的特定子类。 那么我如何根据元素的名称在运行时匹配和实例化配置元素的正确子类?     
已邀请:
诀窍是覆盖
OnDeserializeUnrecognizedElement
方法并动态创建所需的配置元素,并手动反序列化。
override protected bool OnDeserializeUnrecognizedElement (string elementName, System.Xml.XmlReader 
{
    if (sNames.ContainsKey (elementName))
    {
        var elementType = sNames[elementName];
        if (elementType != null)
        {
            var element = Activator.CreateInstance (elementType) as LoggerConfigurationElement;
            if (element != null)
            {
                element.DeserializeElementForConfig (reader, false);
                BaseAdd (element);
            }
        }

        return true;
    }

    return base.OnDeserializeUnrecognizedElement (elementName, reader);
}
在这个例子中,我使用反射和配置的组合预先构建了有效元素名称列表(是的,更多配置!)所以如果提供的元素是有效元素我就知道了。     

要回复问题请先登录注册