Pasando el tipo anónimo como parámetros del método

En mi arquitectura de complementos, actualmente paso un nombre de complemento (cadena), un nombre de método (cadena) y parámetros (matriz de objetos) a mi servicio de complemento para ejecutar el método especificado y devolver el resultado (de tipo T).

El método de ejecución del servicio del complemento se puede ver a continuación:

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

Un ejemplo de uso:

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

Lo que preferiría hacer es pasar un tipo anónimo en su lugar (ya que creo que esto es más legible), es decir

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

¿Cómo cambiaría mi método de ejecución para asignar las propiedades de tipo anónimo a los parámetros de mi método de complemento?

Había considerado usar el nuevo tipo dinámico en .net 4.0, pero prefiero definir mis parámetros en el método del complemento en lugar de aceptar un objeto dinámico.

Gracias ben

[Actualizar]

Después de mirar el código fuente ASP.NET MVC, parece bastante simple extraer el tipo anónimo en un diccionario de objetos, p. RouteValueDictionary. Con la ayuda de la reflexión, se crea dinámicamente una expresión linq. Aunque es una buena implementación, realmente no quería toda esta complejidad adicional.

Según el comentario a continuación, puedo lograr la legibilidad simplemente especificando mis parámetros en línea (sin necesidad de la declaración de matriz de objetos):

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

Respuestas a la pregunta(9)

Su respuesta a la pregunta