【发布时间】:2016-01-18 12:37:04
【问题描述】:
我正在尝试根据 Dynamically calling Moq Setup() at runtime 使用反射动态配置 Moq
在他们使用的例子中
var body = Expression.PropertyOrField( parameter, "ExampleProperty" );
创建一个表达式来选择对象的所需属性,然后使用该选择器构造一个 lambda 表达式。
我希望我的选择器改为选择一个方法,例如我想动态构造以下内容:
mock.Setup(m => m.MyMethod()).Returns(1);
我尝试过使用:
var body = Expression.PropertyOrField(parameter, "MyMethod");
和
var body = Expression.MakeMemberAccess(parameter, typeof(T).GetMethod("MyMethod"));
但两者似乎都只适用于属性或字段,我可以使用不同的选择器来选择方法吗?
完整代码如下:
var mock = new Mock<T>();
var parameter = Expression.Parameter(typeof(T));
if (typeof(T).GetMethod("MyMethod") != null)
{
var body = Expression.PropertyOrField(parameter, "MyMethod");
var lambdaExpression = Expression.Lambda<Func<T, int>>(body, parameter);
mock.Setup(lambdaExpression).Returns(0);
}
【问题讨论】:
-
期待这篇文章的答案,看起来真的很有趣!抱歉这个问题:/