J'ai une méthode protégée dans une classe de base qui accepte un Func <T> puis se retourne et s'exécute avec un bien supplémentaire. Exemple d'utilisation:Appel de méthode de redirection dans le délégué
public MyResponse DoSomething(MyRequest request)
{
return base.Execute(() => this.Channel.DoSomething(request));
}
Ce que je cherche à faire est de prendre l'instance func délégué et rediriger l'appel de méthode dans l'expression à une autre instance en plus this.Channel, donc quelque chose comme:
protected TResponse Execute<TResponse>(Func<TResponse> command)
{
return command.Method.Invoke(this.otherInstanceOfChannel, command.Target);
}
Ici le "this.otherInstanceOfChannel" serait une instance d'une classe concrète différente de celle "this.channel" passée dans l'appel original mais implémente la même interface. J'ai juste besoin de comprendre quelle méthode est appelée et l'exécuter sur une autre instance en passant les arguments d'origine de l'appelant. J'ai commencé le chemin de MethodCallExpressions et similaires mais mon expression-foo est faible ...
Édité/réécrit pour plus de clarté - espérons que cette version a plus de sens.
Merci, Matt
Est-il impossible d'accepter l'instance en tant que paramètre? Cela impliquerait beaucoup moins de supercherie ... – bobbymcr
Bien sûr, mais en essayant de voir s'il est possible de faire ce que je veux sans casser beaucoup de code qui appelle ça ... beaucoup de code que je ne contrôle pas, malheureusement ... – matt
Voulez-vous dire que 'Execute' est une méthode que vous implémentez? C'est à dire. vous pouvez changer sa signature et sa mise en œuvre? –