我有以下代码从App.config中获取一些值并尝试使用它们来填充类的属性。
foreach (string ReferenceKey in Utilities.CSVToList(ConfigurationManager.AppSettings[source + ":Keys"]))
{
if (ConfigurationManager.AppSettings[ReferenceKey] != null && Incoming_Values.ContainsKey(ConfigurationManager.AppSettings[ReferenceKey]))
{
PropertyInfo info = MyCustomClass.GetType().GetProperty(ReferenceKey.Split(':')[1]);
info.SetValue(MyCustomClass, Incoming_Values[ConfigurationManager.AppSettings[ReferenceKey]]);
}
else
{
return null;
}
}
我遇到的问题是,我从配置文件中获得的KVP显然都是字符串类型,但类的属性是强类型的。我试图“松散地”耦合值和类,但我有一个问题,其中属性不是一个字符串(例如,它是一个日期时间或一个int或甚至我自己的类)。
有谁知道如何处理这样的事情?我应该建立一个翻译班吗?
答案 0 :(得分:1)
框架中现有的实用程序可以帮助您。
一个简单的功能是Convert.ChangeType
方法,但它不是非常可自定义的,仅限于IConvertible
可以管理的类型之间的转换。如果这已经足够,请继续。
这是另一种更可插拔的方法:您可以使用TypeConverter
。您可以从TypeDescriptor
班级获得TypeConverter
:
TypeDescriptor.GetConverter(targetType).ConvertFromInvariantString(configValue)
如果需要,您可以定义自定义TypeConverter
类。这可能会或可能不会比从头开始实施您自己的解决方案更好。由您来决定取决于您的需求。
答案 1 :(得分:1)
查看自定义配置部分,它们为您提供对app.config值的强类型访问。然后,您可以根据自己的意愿将其与课程分开。
How to: Create Custom Configuration Sections Using ConfigurationSection (MSDN)
How to create custom config section in app.config (stack overflow)