У меня есть такое выражение Expression<Func<IInterface, object>>
Как мне пройти / пройти по всем выражениям внутри выражения и найти любое выражение MethodCallExpression, которое использует входной параметр Func (IInterface), для вызова методавот так
inputParameter => inputParameter.MyMethod(typeof(SomeClass))
или метод общего расширения вот так
inputParameter => inputParameter.MyMethod<SomeClass>()
Если найден один из двух методов, мне нужно передать тип.Для метода Generic Extension это будет параметр Generic, который является типом, в другом вызове метода это первый аргумент, предоставленный для параметров в вызове метода
Сигнатура 2 методов выглядит следующим образом
object MyMethod(Type type)
T MyMethod<T>(this IInterface param) where T : class
Тип из одного из двух вызовов методов затем используется для поиска другого Expression<Func<IInterface, object>>
и замены вызова метода «содержимым» выражения.
Любой, кто может помочьмне с, как это можно сделать?
Short
Поиск выражения для любого вызова одного из двух методов, если найден, получить тип, используемый в вызове, и поиск выражения, зарегистрированного длявведите (я получил его в словаре) и замените вызов метода тем, что делает выражение.
Пример
Вот пример того, что я пытаюсь выполнить.Если у меня есть следующие два Expression<Func<IInterface, object>>
, объявленные для типа Bar1 и Bar2
Bar1: x => new Foo1(x.MyMethod(typeof(Bar2)))
Bar2: x => new Foo2()
Решая / комбинируя их, Func<IInterface, object>
для Bar1 изменится, и в итоге будет выглядеть так
Bar1: x => new Foo1(new Foo2())
Звонок x.MyMethod(typeof(Bar2))
в Lambda, зарегистрированный для типа Bar1, заменяется звонком new Foo2()
, зарегистрированным для типа Bar2.
Нужна дополнительная информация?
Пожалуйста, дайте мне знать, если вам нужнобольше информации, чтобы понять мой вопрос.