2009-02-26 64 views
1

我想在自定義網頁控制中實現供應商模式。我仍然試圖瞭解這種模式,並且我有以下問題。供應商模式&DefaultProvider

默認提供程序是我的控件加載時總是要使用的提供程序嗎?從我可以告訴供應商使用將始終是默認值,但我不確定,因爲MSDN文檔說服務器控件允許選擇提供程序應該具有默認值爲defaultProvider的提供程序屬性。對我來說,這意味着只要該提供程序位於Config文件中,控件就可以根據它的Provider屬性加載給定的提供程序。那是對的嗎?因此,如果沒有請求特定提供者,則返回默認提供者。

要更改提供者,我只需更改我的配置文件中的defaultprovider? < - 我認爲這是不正確的,因爲那隻會改變返回的defaultProvider。

是否正確:在控件中,defaultprovider將被加載到控件的OnLoad事件方法中? 我需要根據提供者傳遞來自不同來源的控制數據,但結果數據將被放入一個類中。該控件將用於呈現它自己。

我也很困惑如何從頁面獲取數據到控件? 說我的ProviderBase有一個名爲LoadData

然後方法在我SQLCustomerProvider我將實現LoadData方法,是否可以將這裏定義的代碼來閱讀我的具體數據,並裝入類或應頁面使用控制負載數據進入類?

謝謝!

回答

1

我承認了前面,我的供應商的知識僅限於寫他們的會員/資料/角色,但一般的東西應該仍然適用:

除非你允許開發的oppertunity指定不同提供者,那麼是的,默認提供者是將要使用的提供者。

所以,以認證爲例,如果你在你的web.config以下:

<membership defaultProvider="SqlProvider" userIsOnlineTimeWindow="20"> 
    <providers> 
    <remove name="AspNetSqlProvider" /> 
    <add name="SqlProvider" 
     type="System.Web.Security.SqlMembershipProvider" 
     connectionStringName="SqlServices" 
     enablePasswordRetrieval="false" 
     enablePasswordReset="true" 
     requiresQuestionAndAnswer="true" 
     passwordFormat="Hashed" 
     applicationName="/" /> 
    <add name="AdProvider" 
     type="System.Web.Security.ActiveDirectoryMembershipProvider" /> 
    </providers> 
</membership> 

當你在頁面上的某個位置添加一個Login控件,然後將使用sqlProvider的。

您可以使用不同的供應商在以下兩種方法之一:

  1. 您可以指定使用的登錄控制的MembershipProvider性質不同的供應商
  2. 你可以提供一個方法,要在Login控件稱爲Authenticate事件,在那裏你可以選擇你的提供者。

方法2的一個例子是:

private void OnAuthenticate(object sender, AuthenticateEventArgs e){ 
    bool authenticated = false; 

    MembershipProvider sqlProvider = Membership.Providers["SqlProvider"]; 

    authenticated = sqlProvider.ValidateUser(Login1.UserName, Login1.Password); 

    if (!authenticated){ 
    // User not found in database, try Active Directory: 
    MembershipProvider adProvider = Membership.Providers["AdProvider"]; 
    authenticated = adProvider.ValidateUser(Login1.UserName, Login1.Password); 
    } 

    e.Authenticated = authenticated; 
} 

你可以這樣做你自己控制的其他方式是揭露一個供應商的財產,並檢查是否具有價值,並使用該提供者而不是defaultProvider。

一般來說,提供者模型已被用於提供行爲的默認設置爲已知的類 - 這樣的會員供應商都有(例如)的方法GetUser返回一個MembershipUser - 在AspNetSqlMembershipProvider的實施的全部目的GetUser是從ASP.NET SQL數據庫加載MembershipUser數據 - 你可以在Sample Membership Provider

中看到這一點,我希望這有助於!