5

静的オブジェクトのコンポーネントとして使用できる動的オブジェクトを作成しようとしています。これは、私が達成しようとしていることの不自然な例です。

動的コンポーネントは次のとおりです。

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、コンポーネントベースの動的オブジェクト(物事を始めるためのもの)を達成するためにゼロから作成する方法について誰かが助けてくれますか?

4

2 に答える 2