2011-02-28 94 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