Недавно я сделал что-то на работе, когда вы определили метод, используя лямбду, которую затем принял внутренний объект. Вы также можете использовать строки или передать MethodInfo, но первая не совсем безопасна для типов (а опечатки представляют большой риск), а последняя не очень элегантна.
В основном у меня был такой метод (это не точный метод, он немного более продвинутый):
public void SetRequest(Request req, Expression<Func<Service, Func<long, IEnumerable<Stuff>>> methodSelector);
Ключевым моментом здесь является «выражение», это позволяет вам «выбрать» метод, подобный этому:
SetRequest(req, service => service.SomeMethodTakingLongReturningStuffs);
Селектор метода превращается в дерево выражений, из которого вы можете извлекать различные биты данных. Я не помню точно, как выглядит результирующее дерево, это также зависит от того, как выглядят ваши лямбды.