[英]Use reflection to create lambda expression like x => new { .. }
[英]Reflection .NET Core Create Lambda Expression
我正在嘗試創建一個lambda表達式(使用Reflection),看起來像這樣
IServiceProvider provider => provider.GetService<TDbContext>()
或者,更具體地說,因為GetService
是一個擴展方法:
provider => ServiceProviderServiceExtensions.GetService<TDbContext>(provider)
這是我的代碼:
var methodInfo = typeof(ServiceProviderServiceExtensions).
GetTypeInfo().
GetMethod("GetService").
MakeGenericMethod(typeof(TDbContext));
var lambdaExpression = Expression.Lambda(
Expression.Call(methodInfo, Expression.Parameter(typeof(IServiceProvider), "provider")),
Expression.Parameter(typeof(IServiceProvider), "provider")
);
var compiledLambdaExpression = lambdaExpression.Compile();
我收到了這個錯誤
System.Linq.Expressions.dll中出現“System.InvalidOperationException”類型的異常,但未在用戶代碼中處理
附加信息:從范圍''引用的'System.IServiceProvider'類型的變量'provider',但它沒有定義
您已經創建了兩個具有相同名稱的不同參數。 您應該只調用一次Expression.Parameter
並保存結果然后使用它:
var methodInfo = typeof(ServiceProviderServiceExtensions).
GetTypeInfo().
GetMethod("GetService").
MakeGenericMethod(typeof(TDbContext));
var providerParam = Expression.Parameter(typeof(IServiceProvider), "provider");
var lambdaExpression = Expression.Lambda(
Expression.Call( methodInfo, providerParam ),
providerParam
);
var compiledLambdaExpression = lambdaExpression.Compile();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.