public override void Initialize (string name, NameValueCollection config)
{
if (config == null)
throw new ArgumentNullException ("config");
base.Initialize (name, config);
applicationName = GetStringConfigValue (config, "applicationName", "/");
enablePasswordReset = GetBoolConfigValue (config, "enablePasswordReset", true);
enablePasswordRetrieval = GetBoolConfigValue (config, "enablePasswordRetrieval", false);
requiresQuestionAndAnswer = GetBoolConfigValue (config, "requiresQuestionAndAnswer", true);
requiresUniqueEmail = GetBoolConfigValue (config, "requiresUniqueEmail", false);
passwordFormat = (MembershipPasswordFormat) GetEnumConfigValue (config, "passwordFormat", typeof (MembershipPasswordFormat),
(int) MembershipPasswordFormat.Hashed);
maxInvalidPasswordAttempts = GetIntConfigValue (config, "maxInvalidPasswordAttempts", 5);
minRequiredPasswordLength = GetIntConfigValue (config, "minRequiredPasswordLength", 7);
minRequiredNonAlphanumericCharacters = GetIntConfigValue (config, "minRequiredNonalphanumericCharacters", 1);
passwordAttemptWindow = GetIntConfigValue (config, "passwordAttemptWindow", 10);
passwordStrengthRegularExpression = GetStringConfigValue (config, "passwordStrengthRegularExpression", "");
MembershipSection section = (MembershipSection) WebConfigurationManager.GetSection ("system.web/membership");
userIsOnlineTimeWindow = section.UserIsOnlineTimeWindow;
/* we can't support password retrieval with hashed passwords */
if (passwordFormat == MembershipPasswordFormat.Hashed && enablePasswordRetrieval)
throw new ProviderException ("password retrieval cannot be used with hashed passwords");
string connectionStringName = config ["connectionStringName"];
if (applicationName.Length > 256)
throw new ProviderException ("The ApplicationName attribute must be 256 characters long or less.");
if (connectionStringName == null || connectionStringName.Length == 0)
throw new ProviderException ("The ConnectionStringName attribute must be present and non-zero length.");
connectionString = WebConfigurationManager.ConnectionStrings [connectionStringName];
factory = connectionString == null || String.IsNullOrEmpty (connectionString.ProviderName) ?
System.Data.SqlClient.SqlClientFactory.Instance :
ProvidersHelper.GetDbProviderFactory (connectionString.ProviderName);
}