从遗留到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使代码正常工作。
因为这是遗留代码,所以我不想更改扩展签名。

从遗留到valueinjector

我不知道答案,但我可以说DataTableInjection<fillType>不会编译。您需要使用反射来执行绑定,如下所示:

case "DataTable":
  var tableInjector = typeof (DataTableInjection<>).MakeGenericType(fillType);
  tableInjector.GetMethod("InjectFrom").MakeGenericMethod(tableInjector)
    .Invoke(fillMe, new[] { sourceObject });
  break;