我想定义一个自定义配置部分,并且有一个属性不会产生字符串,而是一个system.type(如果用户键入了一堆垃圾,则为null)
e.g:
<myCustomConfig myAnnoyingType="System.String" />
在C#中(在当前现实世界中)
[ConfigurationProperty("myAnnoyingType")]
public string MyAnnoyingType
{
get { return (string)this["myAnnoyingType"]; }
}
// else where in the app
var stringType = thatConfig.MyAnnoyingType
var actualType = Type.GetType(stringType);
// wow that was boring.
在C#中(在理想世界中)
[ConfigurationProperty("myAnnoyingType")]
public Type MyAnnoyingType
{
get { return (Type)this["myAnnoyingType"]; }
}
我想要的不是必须将项目保存为C#中的字符串,然后将其转换为应用程序中的Type;我希望这可以自动完成,作为ConfigurationManager职责的一部分。
这可能吗?如果必须的话,我可以使用TypeConverter,只是将它保持为字符串似乎很弱,然后在应用程序中进行类型查找。这并不难,当我知道我正在寻找一种类型时,似乎毫无意义,必须明确地做到这一点是有价值的。
答案 0 :(得分:7)
尝试使用将为您进行转换的TypeConverterAttribute。这对我有用。
[ConfigurationProperty("type")]
[TypeConverter(typeof(TypeNameConverter))]
public Type Type
{
get
{
return (System.Type)this["type"];
}
set
{
this["type"] = value;
}
}
答案 1 :(得分:3)
首先,最好使用fully qualified name在设置中定义类型。这样,您从Type
解析string
的问题就会减少。
其次,您需要按照Convert String to Type in C#中已经回答的字符串名称找到Type
,因为只有将string
强制转换为{{}} {1}}。
在你的情况下,它将是:
Type