У меня есть защищенный метод в базовом классе, который принимает Func <T>, а затем оборачивается и выполняет с некоторой добавленной добротой. Пример использования:Вызов метода перенаправления внутри делегата
public MyResponse DoSomething(MyRequest request)
{
return base.Execute(() => this.Channel.DoSomething(request));
}
Что я ищу сделать, это экземпляр делегата и функ переадресацию вызова метода в выражении в другом случае, кроме this.Channel, так что-то вроде:
protected TResponse Execute<TResponse>(Func<TResponse> command)
{
return command.Method.Invoke(this.otherInstanceOfChannel, command.Target);
}
Здесь «this.otherInstanceOfChannel» будет экземпляром другого конкретного класса, чем «this.channel», переданный в исходном вызове, но реализующий тот же интерфейс. Мне просто нужно выяснить, какой метод вызывается и выполнить, что на другом экземпляре, передаваемом в исходных аргументах от вызывающего. Я начал путь MethodCallExpressions и тому подобное, но мое выражение-foo слабое ...
Отредактировано/переписано для наглядности - надеюсь, что эта версия имеет больше смысла.
Спасибо, Matt
Невозможно принять экземпляр в качестве параметра? Это потребует гораздо меньше обмана ... – bobbymcr
Конечно, но пытаясь понять, можно ли делать то, что мне нужно, не нарушая много кода, который вызывает это ... много кода, который я не контролирую, к сожалению ... – matt
Вы имеете в виду, что 'Execute' - это метод, который вы реализуете? То есть вы можете изменить свою подпись и реализацию? –