2013-06-01 40 views
1

阅读从定制在web.config中

节点属性“类型”,我定义我自己<sectionGroup>和<部分>在web.config中的元素。

我需要通过我的自定义<部分>指定的参数之一是Type。

例如,我现在有

<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"];

但日e例外总是相同的。

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

回答

4

使用这样的事情:

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

使用SubclassTypeValidator的不是绝对必要的,但最多会用它的时代......我至少做。

+0

布拉沃,亚历山大! – awj