2016-06-10 20 views
1

我是AOP和PostSharp的新手。我試圖將一個方面應用到預定義的類,例如System.Windows.Forms.Button類,並攔截它的一些方法。 你能指導我如何用PostSharp做到這一點嗎?我們可以使用PostSharp捕獲從給定類型的UIElement引發的事件嗎?如何將某個方面應用於預定義的類?

非常感謝!

回答

0

我懷疑這是可能的,因爲我不認爲ilweaving步postharp可以操縱已編譯的外部dll。

你可以做的是實現自己的按鈕(按鈕從延伸),並有那些方法截獲

+0

這是不高效的,因爲我必須包裝所有UI元素才能捕獲它們的事件:( –

+0

對於事件,您想要做什麼?常規事件處理程序是否工作? – Batavia

+0

我只想知道何時點擊該按鈕,獲取程序中的所有按鈕。 –

1

MethodInterceptionAspect適用於通過攔截呼叫現場呼叫外部DLL的聲明的方法。這意味着該方法本身不會被轉換,而是您調用該方法的地方會發生變化。原始程序集未被轉換。

您可以在您的裝配組播的屬性,並明確指定AttributeTargetAssemblies做到這一點:

[assembly:MyAspect(AttributeTargetAssemblies="myassembly,...", AttributeTargetTypes="...", AttributeTargetMembers="..."] 

這意味着一些限制。例如,如果代碼是從外部代碼調用的,則該調用不會被攔截。在你的情況下,你可以使用它來攔截總是從設計器代碼中調用的方法(如this.Controls.Add(...))。

如果您的源代碼中有按鈕,我認爲會有不同的可行方法。如果您創建了LocationInterceptionAspect並在類型爲Button的所有字段上進行多播,則您將能夠截取應用程序中所有按鈕的創建。在方面代碼(set handler)中,您可以註冊到這些按鈕的事件Clicked

相關問題