动态填充类的属性

时间:2015-04-15 20:22:22

标签: c# reflection loose-coupling

我有以下代码从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或甚至我自己的类)。

有谁知道如何处理这样的事情?我应该建立一个翻译班吗?

2 个答案:

答案 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)