Передача анонимного типа в качестве параметров метода

В моей архитектуре плагинов в настоящее время я передаю имя плагина (строка), имя метода (строка) и параметры (массив объектов) в службу плагинов, чтобы выполнить указанный метод и вернуть результат (типа T).

Метод выполнения сервиса плагина можно увидеть ниже:

public TResult Execute<TResult>(string pluginName, string operation, params object[] input) {
    MethodInfo method = null;
    TResult result = default(TResult);

    var plugin = _plugins.Enabled().FirstOrDefault(x => x.GetType().Name.Equals(pluginName,  StringComparison.InvariantCultureIgnoreCase));

    if (plugin != null) {
        method = plugin.GetType().GetMethods().FirstOrDefault(x => x.Name == operation);
        if (method != null) {
            result = (TResult)method.Invoke(plugin, input);
        }
    }
    return result;
  }

Пример использования:

var url = AppHelper.PluginService.Execute<string>(
    "ImagePlugin",
    "GetImageUrl",
    new object[] { image, size });

Я бы предпочел вместо этого передать анонимный тип (так как я думаю, что это более читабельно), т.е.

var url = AppHelper.PluginService.Execute<string>(
    "ImagePlugin",
    "GetImageUrl",
    new { image = image, targetSize = size });

Как изменить метод Execute, чтобы сопоставить свойства анонимного типа с параметрами метода плагина?

Я рассмотрел использование нового динамического типа в .net 4.0, но я предпочитаю определять свои параметры в методе плагина, а не принимать один динамический объект.

Спасибо Бен

[Обновить]

После просмотра исходного кода ASP.NET MVC кажется, что достаточно просто перетащить анонимный тип в словарь объектов, например. RouteValueDictionary. С помощью отражения выражение linq создается динамически. Хотя это хорошая реализация, я действительно не хотел, чтобы все эти дополнительные сложности.

В соответствии с комментарием ниже, я могу добиться читабельности, просто указав мои параметры в строке (нет необходимости в объявлении массива объектов):

var url = AppHelper.PluginService.Execute<string>("ImagePlugin", "GetImageUrl", image, size);

Ответы на вопрос(9)

Ваш ответ на вопрос