既存のライブラリのラッパーとして動的プロキシを作成しようとしています。目標は、動的ディスパッチを介して既存のオブジェクトですべての操作(プロパティアクセス、メンバーアクセス、メソッド呼び出しなど)を処理することです。このオブジェクトのエラー処理、ロギング、アクセス制御の改善など、横断的関心事のためにそれが必要になる場合があります。
dynamic
インターフェイスを実装する既存のオブジェクトのラッパー
を作成することを思いつきましたが、独自のオブジェクトを実装IDynamicMetaObjectProvider
してすべてを解析するのは面倒なようです。Expressions
DynamicMetaObject
もう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
誰かが仮想メソッドの概要を指摘できますか?