C#:是否有通用的方法将方法调用转发给另一个对象(具有相同的接口)?

时间:2010-10-26 21:18:26

标签: c# reflection

有没有办法以通用的方式实现这种模式?

调度程序对象和一堆工作程序对象都来自同一个接口。

需要将对调度程序对象的任何方法调用分派(转发)到其中一个工作对象(带有所有参数)。

每个方法都需要发现它自己的名字,在worker对象中找到相应的方法,发现参数,然后进行调用。如果可能,不使用变量参数机制。

有没有办法做到这一点?反射?代码生成?

3 个答案:

答案 0 :(得分:5)

它可能不是特别简单,但它非常可靠 - 看看Castle.DynamicProxy:http://kozmic.pl/dynamic-proxy-tutorial/

答案 1 :(得分:1)

一种可能的方法是让调度程序对象中的每个方法引发一个事件,并让所有工作者对象都订阅该事件。 (认为​​这被称为“多播委托”模式)。

我认为这可能不像你想要的那样“通用”,但可能是一种更简单的方法来实现大致相同的目的。

答案 2 :(得分:0)

如果你想采用代码生成路线,这个t4文件会做类似的事情:http://gist.github.com/647885