2009-09-08 69 views
1

有没有办法创建委托类型的代理并让它在DynamicProxy2中实现额外的接口,并且还能够拦截对生成的委托的调用?Castle.DynamicProxy2生成委托类型的代理

我正常生成代理的方式会抛出异常,因为委托类型是密封的。

+1

作为跟进我的答案。在DP 2.2中,扩展当前的代理生成器和/或添加新的代理生成器(如果你想查看代码,那么在存储库中有一个分支)会容易得多(好吧,现在真的很难)。因此,您可以创建一个具有您选择的签名方法的类型(例如您所针对的委托类型之一),并通过包装用户提供的委托的新委托来公开实例上的方法。这应该让你了解一般情况。如果您想继续讨论,请发邮件给我。 – 2009-09-10 19:13:05

+0

刚发邮件给你,这听起来很有趣,等待你的回复! – 2009-09-10 19:45:32

回答

0

帕特里克,

你不需要DynamicProxy为 '代理' 代表 这应该是足够了:

Action delegateToproxy = new Foo().Bar; //Bar is public void Bar(){} 
Action proxy = delegate 
       { 
        Console.WriteLine("Intercepted!"); 
        delegateToProxy(); 
       } 
return proxy; 

[更新:这是aswer不相关这一特定问题] 什么样的你想公开这个API吗?

如果您想跟进此对话,请通过电子邮件与我联系,或者在Castle用户组中启动一个主题。

+0

正如你在更新中所说的那样,这只是目前的一半,剩下的问题是我不能让它实现任何额外的接口。我会将这个答案标记为已被接受的答案,因为它在一般情况下是一个很好的答案。 – 2009-09-10 16:55:51