2011-02-28 56 views
0

我有两个简单的类:动态方法调用

public class A 
{ 
    public void DoSomething(); 
} 

public class Listener 
{ 
    public void OnDoSomethingCalled(); 
} 

我想Listener.OnDoSomethingCalled()来自动每次叫A.DoSomething()被调用。我想在不更改类A的情况下执行此操作。我不想在A中添加委托并将侦听器附加到该委派。想象一下我没有A类源代码的场景。

我不能在这里使用装饰模式,因为我无法修改调用A.DoSomething()的代码。我阅读了有关Reflection.Emit或DynamicMethod的一些信息,以便在运行时动态更改或定义方法。它可以应用在这里以及如何?

+0

我假设你不能修改'A类'? – 2011-02-28 17:37:06

回答

0

你可以尝试使用类似于PostSharp之类的东西面向编程,我相信它应该处理这个问题(它重写CIL)。

+0

但我必须将这些属性添加到我要附加到的类中。我认为这实际上只是一个使用属性的装饰模式实现,所以我不认为它会为我工作。 – Metro 2011-02-28 17:41:45

+0

如果你可以改变它,你可以添加一些东西到装配中。 '[程序集:跟踪(“MyCategory”,AttributeTargetTypes =“My.BusinessLayer。*”)]' – 2011-03-01 16:04:03