Anonymen Typ als Methodenparameter übergeben

In meiner Plugin-Architektur übergebe ich derzeit einen Plugin-Namen (String), einen Methodennamen (String) und Parameter (Objektarray) an meinen Plugin-Service, um die angegebene Methode auszuführen und das Ergebnis (vom Typ T) zurückzugeben.

Die Ausführungsmethode des Plugin-Dienstes ist unten zu sehen:

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

Eine Beispielverwendung:

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

Was ich lieber tun würde, ist stattdessen einen anonymen Typ einzugeben (da ich denke, dass dies besser lesbar ist), d. H.

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

Wie ändere ich meine Execute-Methode, um die anonymen Typeneigenschaften meinen Plugin-Methodenparametern zuzuordnen?

Ich hatte überlegt, den neuen dynamischen Typ in .net 4.0 zu verwenden, aber ich bevorzuge es, meine Parameter in der Plugin-Methode zu definieren, anstatt ein dynamisches Objekt zu akzeptieren.

Danke Ben

[Aktualisieren

Nach Durchsicht des ASP.NET MVC-Quellcodes scheint es einfach genug zu sein, den anonymen Typ in ein Objektverzeichnis zu ziehen, z. RouteValueDictionary. Mit Hilfe der Reflektion wird dynamisch ein Linq-Ausdruck erzeugt. Obwohl es eine gute Implementierung ist, wollte ich diese zusätzliche Komplexität nicht wirklich.

Wie im Kommentar unten angegeben, kann die Lesbarkeit nur durch Angabe meiner Parameter inline erreicht werden (keine Objektarray-Deklaration erforderlich):

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