2008-10-24 185 views
9

當重寫MembershipProvider並直接調用它時,是否有辦法填充Initialize方法的NameValueCollection配置參數,而無需手動查看配置文件中的設置?自定義MembershipProvider初始化方法

很顯然,這個Initialize被asp.net調用,並且配置被填充到某個地方。我已經實現了我自己的MembershipProvider,它通過構建控件工作正常。 我想創建我的提供程序的新實例,並直接調用它,但我真的不想解析爲MembershipProvider的.config,它是連接字符串名稱,然後連接字符串,如果它已經完成某處。

回答

20

tvanfosson-感謝您的幫助。 (如果我有必要的15分,我會投你一票)

從你的鏈接我能弄明白。事實證明,以初始化proceedure第二個參數是從提供的參數列表,並可以通過以下方式來達到:

string configPath = "~/web.config"; 
Configuration config = WebConfigurationManager.OpenWebConfiguration(configPath); 
MembershipSection section = (MembershipSection)config.GetSection("system.web/membership"); 
ProviderSettingsCollection settings = section.Providers; 
NameValueCollection membershipParams = settings[section.DefaultProvider].Parameters; 
Initialize(section.DefaultProvider, membershipParams); 
+4

你現在有這15點需要:) – Abel 2010-08-24 18:07:55

7

不知道你爲什麼要創建一個新的,但如果你自己創建它,你需要閱讀web配置並自己將值傳遞給Initialize(),因爲這是在類之外完成的。我敢肯定,雖然,已經有本節一節處理程序,因此應該只是做的事:

MembershipSection section = WebConfigurationManager.GetSection("membership"); 

然後找到你的供應商和訪問它的屬性來構建的NameValueCollection。我不認爲你將不得不編寫任何代碼來解析配置部分。

這是MSDN上的MembershipSection文檔。從那裏鑽出來。

+1

我試過了,部分爲空。我查看了WebConfigurationManager,而我所擁有的僅僅是AppSettings和ConnectionStrings。會員沒有出現的原因嗎?我在web.config中看到它? – JHORN 2008-10-24 17:09:25

0

在你不應該創建的MembershipProvider實例任何情況。它是由標準的asp.net基礎設施創建和初始化的。你可以通過這樣的代碼訪問它:

var customerMembership = Membership.Provider;

+0

這對我有效!並且它是確保您的可覆蓋的初始化函數運行的唯一方法。 – JeffJeffery 2016-03-07 20:27:17