从遗产迁移到ValueInjecter

时间:2011-10-28 15:53:53

标签: c# generics reflection valueinjecter

我们有一个自定义对象扩展方法,可以处理以下内容。

  • 来源DataRow目标是class
  • 来源DataTable目标是List<class>
  • 来源class目标是class
  • 来源List<class>目标是List<class>

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

1 个答案:

答案 0 :(得分:1)

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

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