从遗留到valueinjector
本文关键字:valueinjector | 更新日期: 2023-09-27 18:12:45
我们有一个自定义对象扩展方法来处理以下内容。
- 源为
DataRow
,目标为class
。 - 源为
DataTable
,目标为List<class>
- 源为
class
目标为class
- 源为
List<class>
目标为List<class>
我发现valueinjector和DataTable,所以我可以处理一个DataRow和DataTable。
所以我要把它们粘合在一起。
这是我试过的。
public static class ObjectExtensions
{
public static void OldFill(this object fillMe, object sourceObject)
{
Type sourceType = sourceObject.GetType();
Type fillType = fillMe.GetType();
switch (sourceType.Name)
{
case "DataRow":
fillMe.InjectFrom<DataRowInjection>(sourceObject);
break;
case "DataTable":
fillMe.InjectFrom<DataTableInjection<fillType>>(sourceObject);
break;
default:
fillMe.InjectFrom(sourceObject);
break;
}
}
}
不确定如何获得正确的fillType
使代码正常工作。
因为这是遗留代码,所以我不想更改扩展签名。
我不知道答案,但我可以说DataTableInjection<fillType>
不会编译。您需要使用反射来执行绑定,如下所示:
case "DataTable":
var tableInjector = typeof (DataTableInjection<>).MakeGenericType(fillType);
tableInjector.GetMethod("InjectFrom").MakeGenericMethod(tableInjector)
.Invoke(fillMe, new[] { sourceObject });
break;