Переход от устаревшего к ValueInjecter

У нас был собственный метод расширения объекта, который обрабатывал следующее.

  • Источник DataRow цель class.
  • Источник DataTable цель List<class>
  • Источник class цель class
  • Источник List<class> цель List<class>

Я нашел ValueInjecter и 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, чтобы код работал правильно.
Поскольку это устаревший код, я не хочу менять сигнатуру расширения.


person Razcer    schedule 28.10.2011    source источник


Ответы (1)


Я не знаю ответа, но могу сказать, что DataTableInjection<fillType> не скомпилируется. Вам нужно будет использовать Reflection для привязки, что-то вроде этого:

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