2010-08-02 4 views
4

J'essaie de créer une classe pour gérer les méthodes d'invocation sur un serveur distant en utilisant mes propres moyens. Pour faciliter la tâche de l'appelant client, j'écris une classe générique qui accepte une interface afin que le compilateur connaisse le nombre d'arguments et le type de retour de la méthode.Comment examinez-vous les arguments passés à un délégué?

public class Service<TInterface> 
{ 
    public TResult Invoke<TResult>(Func<TInterface, TResult> function) 
    { 
     // Do the work 
    } 
} 

L'idée est qu'ils pourraient faire référence à un ensemble qui a des interfaces, par exemple:

public interface ICalculator 
{ 
    int Add(int num1, int num2); 
} 

Et ils pourraient écrire du code pour frapper le service comme celui-ci:

var addend = new Service<ICalculator>(/* constructor */).Invoke(s => s.Add(3, 4)); 

Le problème est que dans le premier bloc de code, j'ai besoin de savoir comment trouver les arguments passés dans leur expression lamda. Comment je fais ça?

Répondre

6

La manière la plus simple de le faire est de prendre un Expression<Func<TInterface,TResult> à la place; c'est alors trivial de se séparer. En fait, vous pouvez simplement lever mon code from here qui couvre la plupart des scénarios. En particulier, regardez ResolveMethod. Une discussion/explication pour cela est here.

+0

Tout droit, mon pote. C'était ça. =) –

Questions connexes