我需要一些DLR帮助.我正在实现一个IDynamicMetaObjectProvider和DynamicMetaObject,但我遇到了一些问题,获得了预期的返回类型.我在metaobject中覆盖了BindInvokeMember,我可以看到所有的args类型但没有返回类型.有人知道如果可能的话我会怎么做?我知道返回类型是动态的,但是如果你调用的东西依赖于返回类型.除非我知道消费者期望的返回类型,否则我不知道要在DynamicMetaObject中执行哪个操作.
我不能在这里粘贴我的实际代码,因为它调用各种工作的东西.下面是一些示例动态对象代码.
public class TestDynamicMetaObject : DynamicMetaObject
{
public TestDynamicMetaObject(Expression expression, object value)
: base (expression, BindingRestrictions.Empty, value)
{
}
public override DynamicMetaObject BindInvokeMember(InvokeMemberBinder binder, DynamicMetaObject[] args)
{
Delegate method = new Func<int>(Test);
return new DynamicMetaObject(
Expression.Call(method.Method),
BindingRestrictions.GetInstanceRestriction(Expression,Value),
Value
);
}
public static int Test()
{
return 10;
}
}
public class TestDynamicObject : IDynamicMetaObjectProvider
{
DynamicMetaObject IDynamicMetaObjectProvider.GetMetaObject(Expression parameter)
{
return new TestDynamicMetaObject(parameter, this);
}
}
Run Code Online (Sandbox Code Playgroud)
这是我正在使用的地方.
static void Main(string[] args)
{
try
{
dynamic x = new TestDynamicObject(); …Run Code Online (Sandbox Code Playgroud)