从web.config </section>中的自定义<section>节点读取属性“type”

时间:2013-06-01 12:55:33

标签: asp.net types web-config configsection

我已经定义了自己的&lt; sectionGroup&gt;和&lt; section&gt; web.config中的元素。

我需要通过自定义&lt; section&gt;指定的其中一个参数是一种类型。

例如,我目前有

<variable name="stage" value="dev" type="System.String, mscorlib" />

然后在ConfigurationElement的实施中我有

[ConfigurationProperty("type", IsRequired = true)]
public Type ValueType
{
    get
    {
        var t = (String) this["type"];
        return Type.GetType(t);
    }
    set
    {
        this["type"] = value;
    }
}

在运行时,它会抛出异常

  

无法找到支持转换为/来自字符串的转换器,类型为'Type'的属性'type'。

我尝试过各种各样的事情,比如

  • 将属性重命名为valueType(以避免与可能预先配置的同名属性发生冲突)
  • 将其简单地指定为"System.String"
  • 将属性中的getter更改为return (Type) this["type"];

但异常总是一样的。

有人能指出我正确的方向吗?

1 个答案:

答案 0 :(得分:4)

使用类似的东西:

[ConfigurationProperty("type", IsRequired = true)]
[TypeConverter(typeof(TypeNameConverter)), SubclassTypeValidator(typeof(MyBaseType))]
public Type ValueType
{
    get
    {
        return (Type)this["type"];            
    }
    set
    {
        this["type"] = value;
    }
}

SubclassTypeValidator的使用并非绝对必要,但大多数情况下你会使用它...我至少会这样做。