2009-07-28 11 views
0

J'ai une application Web asp.net qui utilise un MembershipProvider et RolesProvider que j'ai écrit pour utiliser nos serveurs LDAP eDirectory.Référencement des paramètres Web.Config en un seul endroit

Voici mes fournisseurs maintenant:

<membership defaultProvider="EDirectoryMembershipProvider"> 
    <providers> 
    <clear/> 
    <add name="EDirectoryMembershipProvider" type="EDirectoryMembershipProvider" 
     PrimaryLdapServer="1.2.3.4" 
     SecondaryLdapServer="5.6.7.8" 
     LdapPort="1234" 
     CertPath="d:\mycert.crt" /> 
    </providers> 
</membership> 

<roleManager enabled="true" defaultProvider="EDirectoryRoleProvider" cacheRolesInCookie="true" cookieRequireSSL="true"> 
    <providers> 
    <clear/> 
    <add name="EDirectoryRoleProvider" type="EDirectoryRoleProvider" 
     PrimaryLdapServer="1.2.3.4" 
     SecondaryLdapServer="5.6.7.8" 
     LdapPort="1234" 
     CertPath="d:\mycert.crt" /> 
    </providers> 
</roleManager> 

Ces deux fournisseurs sont configurés dans web.config et les paramètres pour les deux sont les mêmes. Y at-il un moyen de stocker les paramètres dans une autre section (de préférence appsettings) et référence cette section pour la configuration des fournisseurs?

Répondre

0

je mets quelque chose en place que je suis content de:

J'ai créé cette classe de configuration:

public class LdapConfiguration : ConfigurationSection 
    { 
     [ConfigurationProperty("PrimaryServer", IsRequired = true)] 
     public string PrimaryServer 
     { 
      get { return (string)base["PrimaryServer"]; } 
      set { base["PrimaryServer"] = value; } 
     } 

     [ConfigurationProperty("SecondaryServer", IsRequired = true)] 
     public string SecondaryServer 
     { 
      get { return (string)base["SecondaryServer"]; } 
      set { base["SecondaryServer"] = value; } 
     } 

     // more properties that I need 
     ... 
    } 

Ensuite, j'ai enregistré une nouvelle section de configuration et stocké la configuration dans un élément ldapConfiguration:

<configSections> 
     ... 
     <section name="ldapConfiguration" type="LdapConfiguration"/> 
    </configSections> 
    <ldapConfiguration PrimaryServer="1.2.3.4" SecondaryServer="5.6.7.8" Port="1234" CertPath="d:\mycert.cert" /> 

    <system.web> 
    ... 
    <!--Oh, my God, this is so awesome! In your face!--> 
    <membership defaultProvider="EDirectoryMembershipProvider"> 
     <providers> 
     <clear/> 
     <add name="EDirectoryMembershipProvider" type="EDirectoryMembershipProvider" /> 
     </providers> 
    </membership> 

    <roleManager enabled="true" defaultProvider="GtccLdapRoleProvider" cacheRolesInCookie="true" cookieRequireSSL="true"> 
     <providers> 
      <clear/> 
      <add name="GtccLdapRoleProvider" type="EDirectoryRoleProvider" /> 
     </providers> 
    </roleManager> 
    ... 
    </system.web> 

Puis, dans chacune de mes classes de fournisseur, je les initialisés en utilisant mon nouvel objet de configuration:

public EDirectoryMembershipProvider() 
    { 
     var ldapConfig = (LdapConfiguration)WebConfigurationManager.OpenWebConfiguration("/").GetSection("ldapConfiguration"); 
     this.PrimaryLdapServer = ldapConfig.PrimaryServer; 
     this.SecondaryLdapServer = ldapConfig.SecondaryServer; 
     // initialize the rest here 
     ... 
    } 

    public override void Initialize(string name, NameValueCollection config) 
    { 
     base.Initialize(name, config); 
     // not initializing here anymore 
    } 

Et maintenant je stocke les paramètres de configuration dans un seul endroit.

0

Si je vous ai bien compris c'est ce que vous demander:

<membership configSource="membership.config"> 
Questions connexes