我正在尝试创建一个可用作静态对象组件的动态对象。这是我想要完成的一个人为的例子。
这是动态组件:
public class DynamicComponent : DynamicObject
{
public override bool TryInvokeMember(
InvokeMemberBinder binder,
object[] args,
out object result)
{
result = "hello";
return true;
}
}
这是一个DynamicObject
不能继承的类……假设有一些第三方类我被迫继承。
public class AStaticComponent : VendorLibraryClass, IDynamicMetaObjectProvider
{
IDynamicMetaObjectProvider component = new DynamicComponent();
public DynamicMetaObject GetMetaObject(Expression parameter)
{
var result = component.GetMetaObject(parameter);
return result;
}
}
作品的直接使用DynamicComponent
:
dynamic dynamicComponent = new DynamicComponent();
Assert.AreEqual(dynamicComponent.AMethod(), "hello");
但是,转发GetMetaObject
通过AStaticComponent
会导致某种形式的无限循环。
dynamic dynamicComponent = new AStaticComponent();
Assert.AreEqual(dynamicComponent.AMethod(), "hello"); //causes an infinite loop
有谁知道为什么会这样?
如果它是一些DynamicObject
我无法改变的行为,有人可以提供一些帮助,说明如何IDynamicMetaObjectProvider
从头开始创建一个基于组件的动态对象(只是让事情开始的东西)?