2009-02-26 3 views
1

Ich versuche, das Provider-Muster in einem benutzerdefinierten Web-Steuerelement zu implementieren. Ich versuche immer noch, das Muster zu verstehen, und ich habe die folgenden Fragen.Provider Pattern & DefaultProvider

Ist der Standardanbieter der Anbieter, der immer verwendet wird, wenn meine Steuerung geladen wird? Von dem, was ich feststellen kann, wird der verwendete Provider immer der Standard sein, aber ich bin nicht sicher, weil die MSDN-Dokumentation besagt, dass Serversteuerelemente, die die Auswahl von Providern zulassen, eine Provider-Eigenschaft haben sollten, die standardmäßig auf den Wert des DefaultProviders gesetzt werden sollte. Für mich bedeutet das, dass das Steuerelement einen bestimmten Provider basierend auf seiner Provider-Eigenschaft laden kann, solange sich dieser Provider in der Konfigurationsdatei befindet. Ist das korrekt? Daher wird der Standardanbieter zurückgegeben, wenn kein bestimmter Anbieter angefordert wird.

Um Anbieter zu wechseln, ändere ich einfach den defaultprovider in meiner Konfigurationsdatei? < - Ich denke, das ist falsch, da dies nur den Rückgabewert defaultProvider ändern würde.

Ist das korrekt: In einem Steuerelement würde der defaultprovider in der OnLoad-Ereignismethode des Steuerelements geladen werden? Ich muss die Steuerdaten aus verschiedenen Quellen je nach Anbieter übergeben, aber die resultierenden Daten würden dann in einer Klasse abgelegt werden. die das Steuerelement verwenden würde, um sich selbst zu rendern.

Ich bin auch verwirrt, wie man die Daten zur Steuerung von der Seite erhält? meine Provider Say Loaddata

Da ist in meinem SQLCustomerProvider rief eine Methode hatte ich die Loaddata-Methode implementieren würde, ist es in Ordnung, diesem Code hier anpassen meine spezifischen Daten zu lesen und in die Klasse laden oder sollte die Steuerbelastung der Seite mit die Daten in die Klasse?

Danke!

Antwort

1

Ich gebe vorne, dass meine Kenntnisse des Anbieters sie für Mitgliedschaft/Profile/Rollen zu schreiben beschränkt sind, sondern die allgemeinen Sachen gelten sollen:

, wenn Sie den Entwickler die oppertunity erlauben eine andere angeben Provider, dann ja, der Standardanbieter ist derjenige, der verwendet wird.

So Authentifizierung als Beispiel genommen wird, wenn Sie die folgenden in Ihrem web.config haben:

<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> 

Wenn Sie ein Login-Steuerelement irgendwo auf einer Seite hinzufügen, dann wird die SqlProvider verwenden.

Sie können einen anderen Anbieter in einem von zwei Arten verwenden:

  1. Sie einen anderen Anbieter mit MembershipProvider Eigenschaft der Steuer Anmeldung angeben
  2. Sie eine Methode liefern könnte auf den Login-Kontrollen aufgerufen werden Authenticate Ereignis, wo Sie Ihren Anbieter auswählen können.

Ein Beispiel für Verfahren 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; 
} 

Andere Möglichkeiten, wie Sie diese auf Ihrem eigenen Kontrolle tun können, ist eine Eigenschaft Provider zu belichten, und prüfen Sie, ob das einen Wert hat, und verwenden, die Provider anstelle des DefaultProviders.

Im Allgemeinen hat das Provider-Modell einen Standardsatz von Verhalten zu schaffen, zu einer bekannten Klasse verwendet worden - so die Membership Provider haben alle (zum Beispiel) ein Verfahren GetUser das zurückgeben MembershipUser - der ganzen Zweck der Durchführung des AspNetSqlMembershipProvider von GetUser lädt die MembershipUser-Daten aus der ASP.NET SQL-Datenbank - Sie können dies in Aktion in der Sample Membership Provider

Ich hoffe, dass dies hilft!