2010-05-26 49 views
3

參考我可以回答這個問題:How would you audit ASP.NET Membership tables, while recording what user made the changes?是否可以截取一個你不擁有並且沒有創建的對象的靜態方法?

是否有可能截獲一個電話,從代碼來你不擁有,一個構造函數在一個密封的內部類,你不操縱的意圖自己返回前的對象?

具體的例子:

SqlMembershipProvider,爲它的所有數據訪問,實例化一個連接輔助類,System.Web.DataAccess.SqlConnectionHolder

期望的結果是攔截此實例並在繼續執行之前在System.Web.DataAccess.SqlConnectionHolder的ctor中打開的公共連接上執行操作。

更新: 因此,正如萊皮觀察到我的例子,我說我想要的不是我想要的。

目標現在System.Web.DataAccess.SqlConnectionHelper.GetConnection()

因此,我們可以攔截調用此方法?

internal static SqlConnectionHolder GetConnection(string connectionString, bool revertImpersonation) 

這是可能的。如果是這樣,一個簡短的例子,將不勝感激。

+0

我不認爲這是可能的。從查看Reflector中的代碼,似乎很難掌握正在使用的SqlConnection對象。 – leppie 2010-05-26 11:26:12

+0

@leppie - 我可能會丟失一些東西,但我可以在糟糕的一天閉上眼睛和嘴巴充滿引用'內部SqlConnection _Connection;'。兩次。我錯過了什麼嗎? ;-) – 2010-05-26 11:42:18

+0

詩人:你如何獲得'SqlConnectionHolder'實例?從我看到的這個每次都是通過'SqlConnectionHelper'類創建的。 – leppie 2010-05-26 12:43:08

回答

2

從技術上來說,這可以通過一個IL重寫器來實現,類似於Postsharp所做的。但是,鑑於這是一個.NET程序集,您所說的具有強大的名稱,存儲在GAC中,並且不會超出「技術上可行」的階段。

+0

漢斯 - 這個問題已經改變了一點,多虧了嬉皮士,但我懷疑答案是一樣的。所以,儘管在這種情況下這是不可能的,但我想知道更多。你能添加一些好的鏈接嗎?或者甚至更好,添加一個明確徵求的搜索詞,指向適當的資源。繼承人你的機會LMGTFY某人,而不是得到它。 ;-) – 2010-05-26 13:47:09

+0

不確定,大部分都是封閉源代碼。也許AspectSharp:http://sourceforge.net/projects/aspectsharp/files/ – 2010-05-26 13:59:31

+0

謝謝你。對我有一個+。我會多次碰到這個,看看在接受之前擺出什麼。 – 2010-05-26 14:25:28

相關問題