[英]Get MethodInfo from Expression tree
我有以下方法:
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)
方法被調用?
在鬼混之后,我需要做的就是將表達式的Body
MethodCallExpression
為MethodCallExpression
。
您可以嘗試使用ExpressionVisitor
。 重寫VisitMethodCall
方法將允許您檢查表達式中的每個方法調用。 如果是customer => customer.Get(1)
您將獲得一個帶有MethodCallExpression
回調,其Object
屬性設置為表示customer
ParameterExpression
, Method
參數設置為Get
方法的MethodInfo
, Arguments
設置為單個常量表達式的集合表示整數常量1
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.