更新2: 不上AOP正面看起來不錯,我很害怕 - 見Is is possible to intercept a static method on an object you don't own and did not create?
而且在評論暗示,它看起來像最好的辦法是使用提供程序工具包的實施供應商和電線的勾成SqlConnectionHelper.GetConnection()
我使用工具包的代碼,我已經清理了相當大,可靠多年,沒有任何問題。如果您有興趣,請在4.0上確認並打包。
更新:
好吧,我想我更好地瞭解您的需求,請告訴我,如果我是正確的:
您需要正在使用由提供實際的連接?
SqlMembershipProvider的利用輔助類,System.Web.DataAccess.SqlConnectionHolder
,爲它的所有數據訪問。
我還沒有做到這一點,但從我收集到的信息來看,您可以使用AOP實現(例如Castle DynamicProxy)(或者其中一個利用它的庫)來攔截調用來構建此對象,並在那裏獲得連接。
可能有人有更多經驗的證實或否認這一點?
原來的答覆:
無需從SqlMembershipProvider的派生。只需進入並得到你需要的東西。
string connectionString =
typeof(SqlMembershipProvider)
.GetField("_sqlConnectionString",BindingFlags.NonPublic | BindingFlags.Instance)
.GetValue(Membership.Provider);
謝謝,非常有趣的想法。我在想,AOP方法是有意義的。不知道我現在想引入另一個依賴於像Castle這樣的東西。現在我正在考慮使用我剛發現的SqlMembershipProvider的源代碼。我擔心的一個問題是,這個源代碼是從2006年開始的,我不知道它是否被後續的asp.net版本更新過。 – Pete 2010-05-26 14:25:11
其實,我還有一個關於AOP的問題,它對我們來說並不好看.http://stackoverflow.com/questions/2912300/is-is-possible-to-intercept-a-constructor-on-a-但是 - 我的下一個建議是使用基於工具包示例的自定義提供程序。多年來,我已經對這些代碼進行了相當多的改進,它的功能就像一個魅力。沒有任何更改會影響該代碼的適用性。如果您可以等待幾天,我會提供我的工作。 – 2010-05-26 15:27:55
@Pete - ping ...抱歉,沒有@你看到更新。 – 2010-05-26 15:36:57