我希望能够上课(由第三方编写和维护),用一些神奇的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
的线程安全性,但我正在寻找一种通用的方法。此代码用于实际硬件测试,需要额外的重试层,日志记录等。
答案 0 :(得分:2)
我已经在SO上找到了答案。
How to wrap each function in project?
流行语是AOP(面向方面编程)。
它没有内置到Visual Studio中。有PostSharp和AspectDNG:
答案 1 :(得分:2)
您可能需要调查Aspect Oriented Programming。
PostSharp是一个非常流行的框架,可以在方法调用之前/之后注入代码,例如线程代码,这是Locking上的示例。
这也可以帮助记录,这里是example