簡體   English   中英

Reflection .NET Core創建Lambda表達式

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM