我希望能够获取一个类(由第三方编写和维护),用一些神奇的 C# 糖包装它,这让我可以用自定义锁定机制(或日志机制或其他)包装每个成员函数(或更多)。
例如,
class Foo { // someone else wrote this and I can't touch it.
void A() {}
void B() {}
// plus 10,000 other functions I don't want to know about
}
class WrappedFoo : Foo { // this is my class, I can do what ever I want
// this is pseudo code !!
OnMemberInvoke(stuff) {
lock {
Console.WriteLine("I'm calling " + stuff);
MemberInvoke(stuff);
Console.Writeline("I'm done calling " + stuff);
}
}
// I could also deal with OnMemberInvokeStart() and OnMemberInvokeDone()
// pairwise hooks too.
}
WrappedFoo wfoo = new WrappedFoo();
wfoo.A();
wfoo.B();
输出
I'm calling A
I'm done calling A
I'm calling B
I'm done calling B
现在我想我可以用DynamicObjects
和来做到这一点TryInvokeMember
,但是我失去了我喜欢 C# 的所有类型检查和制表符补全。在这个例子中,我提到lock
了线程安全,但我正在寻找一种通用的方法来做到这一点。此代码用于实际硬件测试,需要额外的重试层、日志记录等。