既存のライブラリのラッパーとして動的プロキシを作成しようとしています。目標は、動的ディスパッチを介して既存のオブジェクトですべての操作(プロパティアクセス、メンバーアクセス、メソッド呼び出しなど)を処理することです。このオブジェクトのエラー処理、ロギング、アクセス制御の改善など、横断的関心事のためにそれが必要になる場合があります。
dynamicインターフェイスを実装する既存のオブジェクトのラッパー
を作成することを思いつきましたが、独自のオブジェクトを実装IDynamicMetaObjectProviderしてすべてを解析するのは面倒なようです。ExpressionsDynamicMetaObject
もう1つの解決策は、クラスから継承して手間のかかるDynamicObject作業を行うことですが、ここでも仮想メソッドが多数あり、オーバーライドする方法が正確にはわかりません。私は、メソッドが何をするのか、またはそれらを実装する方法を知っているだけだと思いTrySetMemberますTryGetMemberがTryInvokeMember
、使用方法がわからないメソッドは他にもたくさんあります!
public class DynamicProxy : DynamicObject
{
private object Value;
public DynamicProxy(object value)
{
this.Value = value;
}
public override bool TryGetMember(GetMemberBinder binder, out object result)
{
result = null; // get proxy object value using reflection
return true;
}
public override bool TrySetMember(SetMemberBinder binder, object value)
{
// set proxy object value using reflection
return true;
}
public override bool TryInvokeMember(InvokeMemberBinder binder, object[] args, out object result)
{
result = null; // call proxy object method using reflection
return true;
}
public override bool TryInvoke(InvokeBinder binder, object[] args, out object result)
{
return base.TryInvoke(binder, args, out result);
}
public override bool TryDeleteIndex(DeleteIndexBinder binder, object[] indexes)
{
// What to do here?
}
public override bool TryDeleteMember(DeleteMemberBinder binder)
{
// What to do here?
}
public override bool TryUnaryOperation(UnaryOperationBinder binder, out object result)
{
// What to do here?
}
// ... Other virtual methods of DynamicObject
}
だから私の質問は:インターフェースを完全にカバーするDynamicObjectか、少なくとも完全に実装するオープンソースライブラリはありIDynamicMetaObjectProviderますか?DynamicObject誰かが仮想メソッドの概要を指摘できますか?