2009-02-26 10 views
1

J'essaie d'implémenter le modèle de fournisseur dans un contrôle Web personnalisé. J'essaie toujours de comprendre le modèle et j'ai les questions suivantes.Motif de fournisseur et DefaultProvider

Le fournisseur par défaut sera-t-il toujours utilisé lorsque mon contrôle sera chargé? De ce que je peux dire le fournisseur utilisé sera toujours la valeur par défaut, mais je ne suis pas sûr parce que la documentation MSDN dit que les contrôles serveur qui permettent la sélection des fournisseurs devraient avoir la propriété Provider qui devrait par défaut à la valeur de defaultProvider. Pour moi, cela signifie que le contrôle peut charger un fournisseur donné en fonction de sa propriété Provider tant que ce fournisseur est dans le fichier de configuration. Est-ce exact? Ainsi, le fournisseur par défaut est renvoyé si aucun fournisseur spécifique n'est demandé.

Pour changer de fournisseur puis-je simplement changer le fournisseur par défaut dans mon fichier de configuration? < - Je pense que c'est incorrect car cela ne ferait que changer le defaultProvider retourné.

Est-ce correct: Dans un contrôle, le fournisseur par défaut serait chargé dans la méthode d'événement OnLoad du contrôle? Je dois transmettre les données de contrôle provenant de différentes sources en fonction du fournisseur, mais les données résultantes seront alors placées dans une classe. que le contrôle utiliserait pour se rendre.

Je suis également confus comment obtenir les données au contrôle de la page? Dis mon ProviderBase avait une méthode appelée LoadData

Puis dans mon SQLCustomerProvider je mettre en œuvre la méthode LoadData, est-il correct de personnaliser ce code ici pour lire mes données spécifiques et charger dans la classe ou si la page en utilisant la charge de commande les données dans la classe?

Merci!

Répondre

1

Je reconnais d'emblée que ma connaissance des fournisseurs est limitée à les écrire à l'adhésion/Profil/Rôles, mais les choses en général doit être applicable:

Sauf si vous permettez au développeur du oppertunity pour spécifier un autre fournisseur, alors oui, le fournisseur par défaut est celui qui va être utilisé.

Ainsi, en prenant comme exemple l'authentification, si vous aviez les éléments suivants dans votre 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> 

Lorsque vous ajoutez un contrôle de connexion quelque part sur une page, puis qui utilisera SqlProvider.

Vous pouvez utiliser un autre fournisseur dans l'une des deux façons suivantes:

  1. Vous pouvez spécifier un autre fournisseur en utilisant MembershipProvider propriété du contrôle de connexion
  2. Vous pouvez fournir une méthode à appeler sur les contrôles de connexion Authenticate événement, où vous pouvez choisir votre fournisseur.

Un exemple de la méthode 2 est:

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

D'autres façons dont vous pouvez le faire sur votre propre contrôle est d'exposer une propriété du fournisseur, et vérifiez si cela a une valeur, et l'utilisation que fournisseur au lieu du defaultProvider.

En général, le modèle de fournisseur a été utilisé pour fournir un ensemble par défaut de comportement à une classe connue - de sorte que les fournisseurs d'adhésion ont tous (par exemple) une méthode GetUser qui renvoient un MembershipUser - tout le but de la mise en œuvre du AspNetSqlMembershipProvider de GetUser est de charger les données MembershipUser de la base de données SQL ASP.NET - vous pouvez le voir en action dans le Sample Membership Provider

J'espère que cela aide!