2008-10-24 12 views
9

Lors de la substitution de MembershipProvider et de son appel direct, existe-t-il un moyen de remplir le paramètre de configuration NameValueCollection de la méthode Initialize sans rechercher manuellement les paramètres dans le fichier de configuration?Custom MembershipProvider Méthode Initialize

Évidemment, cette initialisation est appelée par asp.net et la configuration est en cours de remplissage quelque part. J'ai mis en place mon propre MembershipProvider et cela fonctionne très bien grâce aux commandes intégrées. Je voudrais créer une nouvelle instance de mon fournisseur et y faire directement appel, mais je ne veux pas vraiment analyser le .config pour le MembershipProvider, c'est le nom de la chaîne de connexion et ensuite la chaîne de connexion si c'est déjà fait quelque part.

Répondre

20

tvanfosson- Merci pour l'aide. (Si j'avais les 15 points nécessaires, je voterais pour vous)

De votre lien, j'ai été en mesure de comprendre. Il se trouve le deuxième paramètre à la proceedure Initialiser était la liste des paramètres du fournisseur et pourrait être atteint de la manière suivante:

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

vous avez maintenant ces 15 points nécessaires :) – Abel

7

Vous ne savez pas pourquoi vous voulez en créer un nouveau, mais si vous le créez vous-même, vous devez lire la configuration Web et obtenir les valeurs vous-même pour passer à Initialize() car cela se fait en dehors de la classe. Je suis sûr, cependant, qu'il existe déjà un gestionnaire de section pour cette section, il devrait être juste une question de faire:

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

Ensuite, trouvez votre fournisseur et d'accéder à ses propriétés pour construire NameValueCollection. Je ne pense pas que vous devrez écrire du code pour analyser la section de configuration.

Voici la documentation MembershipSection sur MSDN. Descendre de là.

+1

J'ai essayé ceci et la section est nulle. J'ai regardé WebConfigurationManager et tout ce que j'ai est AppSettings et ConnectionStrings. Y a-t-il une raison pour laquelle l'adhésion n'apparaît pas? Je le vois dans le web.config? – JHORN

0

En tout cas, vous ne devriez pas créer une instance de MembershipProvider. Il crée et initialise par l'infrastructure asp.net standard. Vous pouvez y accéder par un code comme celui-ci:

var customerMembership = Membership.Provider;

+0

Cela a fonctionné pour moi! et c'est le seul moyen de s'assurer que votre fonction d'initialisation remplaçable s'exécute. – JeffJeffery