包装函数的通用方法

fua*_*ark 5 c# wrapper

假设我想将一个函数包装在另一个函数中,以便向包装的函数添加一些功能。但我事先不知道返回类型或参数,因为这些方法是作为 Web 服务代理生成的。

我的第一个想法是使用Func<T>. 但有些函数可能会返回 void,在这种情况下Action<T>会更合适。

现在我的问题:是否有一个很好的通用方法来实现这一目标?我需要寻找一些模式吗?

RQD*_*QDQ 3

好吧,我想到了外观模式……这不是一种非常自动的做事方式,但它确实有效。基本上,您只需将另一个接口放在代理前面并调用它即可。然后您可以添加任何您想要的功能。

解决这个问题的另一种方法是使用面向方面的编程。我过去曾使用PostSharp (当它免费时)来执行此操作。您可以通过向方法/属性添加属性来执行诸如在函数中添加预处理/后处理之类的操作。然后,AOP 组件使用代码编织来重写您的 IL,以包含您引用的代码。请注意,这会显着减慢构建过程。