静的オブジェクトのコンポーネントとして使用できる動的オブジェクトを作成しようとしています。これは、私が達成しようとしていることの不自然な例です。
動的コンポーネントは次のとおりです。
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
、コンポーネントベースの動的オブジェクト(物事を始めるためのもの)を達成するためにゼロから作成する方法について誰かが助けてくれますか?