我有以下方法:
public TResult Call<TResult>(Expression<Func<T, TResult>> code)
{
var returnValue = default(TResult);
// code that will inspect the interface method that is being called
// along with lots of other code
// and then call a WebAPI service.
return returnValue;
}
在这种情况下,T
是名为ICustomer
的界面,TResult
将是一个类CustomerData
在这个具体的例子中,我正在做以下事情:
var model = client.Call(customer => customer.Get(1));
我的最终目标是能够检查某些属性的接口方法。基于这些属性,我想调用WebAPI服务并将接口方法中的任何参数传递给它。
如何在Call
方法中找出interface.Get(1)
方法被调用?
答案 0 :(得分:3)
在鬼混之后,我需要做的就是将表达式的Body
转换为MethodCallExpression
。
答案 1 :(得分:2)
您可以尝试使用ExpressionVisitor
。覆盖VisitMethodCall
方法将允许您检查表达式中的每个方法调用。如果是customer => customer.Get(1)
,您将获得MethodCallExpression
一次回调,Object
属性设置为ParameterExpression
,代表customer
,Method
参数设置为{ {1}}方法的{1}}和MethodInfo
设置为表示整数常量Get
的单个常量表达式的集合。