.net 在一个位置引用Web.Config设置
我有一个asp.net web应用程序,它使用了我编写的用于使用eDirectory ldap服务器的MembershipProvider和RoleProvider 以下是我的提供商:.net 在一个位置引用Web.Config设置,.net,asp.net,web-config,.net,Asp.net,Web Config,我有一个asp.net web应用程序,它使用了我编写的用于使用eDirectory ldap服务器的MembershipProvider和RoleProvider 以下是我的提供商: <membership defaultProvider="EDirectoryMembershipProvider"> <providers> <clear/> <add name="EDirectoryMembershipProvider" type
<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中配置,并且两者的设置相同。是否有办法将设置存储在另一个部分(最好是appsettings)中,并参考该部分进行提供商的配置?如果我理解正确,这就是您的要求:
<membership configSource="membership.config">
我放置了一些我满意的东西: 我创建了这个配置类:
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
}