2009-07-28 3 views
0

У меня есть веб-приложение asp.net, в котором используется MembershipProvider и RolesProvider, которые я написал для использования наших серверов ldap eDirectory.Ссылка на Web.Config Настройки в одном месте

Вот мои провайдеры в настоящее время:

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

Эти два поставщика настраиваются в web.config и настройки для обоих одинаковы. Есть ли способ сохранить настройки в другом разделе (предпочтительно в настройках приложения) и указать этот раздел для конфигурации поставщиков?

ответ

0

я положил что-то на месте, что я доволен:

Я создал этот класс конфигурации:

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

Затем я зарегистрировал новый раздел конфигурации и сохранил конфигурацию в элементе 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> 

Тогда в каждом из моих классов провайдера, я инициализируюсь их с помощью моего нового объекта конфигурации:

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 
    } 

А теперь я храню эти параметры конфигурации в одном месте.

0

Если я правильно вас понял, что это то, что вы просите:

<membership configSource="membership.config"> 
Смежные вопросы