Passando tipo anônimo como parâmetros de método

Na minha arquitetura de plug-in, estou passando um nome de plug-in (string), nome de método (string) e parâmetros (array de objetos) para o meu serviço de plug-in para executar o método especificado e retornar o resultado (do tipo T).

O método de execução do serviço de plug-in pode ser visto abaixo:

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;
  }

Um exemplo de uso:

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

O que eu prefiro fazer é passar em um tipo anônimo (como eu acho que isso é mais legível), ou seja,

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

Como eu alteraria meu método Execute para mapear as propriedades do tipo anônimo para os parâmetros do meu método de plug-in?

Eu tinha pensado em usar o novo tipo dinâmico no .net 4.0, mas prefiro definir meus parâmetros no método de plug-in em vez de aceitar um objeto dinâmico.

Graças Ben

[Atualizar]

Depois de examinar o código-fonte do ASP.NET MVC, parece simples o suficiente para inserir o tipo anônimo em um dicionário de objetos, por exemplo. RouteValueDictionary. Com a ajuda da reflexão, uma expressão linq é criada dinamicamente. Embora seja uma boa implementação, eu realmente não queria toda essa complexidade extra.

Conforme o comentário abaixo, posso obter legibilidade apenas especificando meus parâmetros em linha (não há necessidade da declaração da matriz de objetos):

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

questionAnswers(9)

yourAnswerToTheQuestion