title: How do I call Initialize on a custom MembershipProvider?
body: <p>I have read through all the related questions, but I still unable to get the right solution for some reason, something is not right on my side, but not sure what's causing it.</p>
  
  <p>I have created a Custom Membership Provider, also changed my web.config to :</p>
  
  <pre><code>   &lt;membership defaultProvider="MyMemberShipProvider"&gt;
        &lt;providers&gt;
          &lt;clear /&gt;
          &lt;add name="MyMemberShipProvider" 
                    type="MyNameSpace.MyMemberShipProvider" 
                    connectionStringName="ApplicationServices" 
                    enablePasswordRetrieval="false" 
                    enablePasswordReset="true" 
                    requiresQuestionAndAnswer="false" 
                    requiresUniqueEmail="false" 
                    passwordFormat="Hashed" 
                    maxInvalidPasswordAttempts="5" 
                    minRequiredPasswordLength="6" 
                    minRequiredNonalphanumericCharacters="0" 
                    passwordAttemptWindow="10" 
                    passwordStrengthRegularExpression="" 
                    applicationName="MyApplication" /&gt;
        &lt;/providers&gt;
      &lt;/membership&gt;
  </code></pre>
  
  <p>Here is the code for my Initialize method:</p>
  
  <pre><code>public override void Initialize(string name, NameValueCollection config)
  {
      if (config == null)
      { throw new ArgumentNullException("config"); }
  
      if (string.IsNullOrEmpty(name))
      { name = "MyMemberShipProvider"; }
  
      if (string.IsNullOrEmpty(config["description"]))
      {
          config.Remove("description");
          config.Add("description", "My Membership Provider");
      }
  
      base.Initialize(name, config);
  
      _applicationName = GetConfigValue(config["applicationName"], System.Web.Hosting.HostingEnvironment.ApplicationVirtualPath);
      _maxInvalidPasswordAttempts = Convert.ToInt32(GetConfigValue(config["maxInvalidPasswordAttempts"], "5"));
      _passwordAttemptWindow = Convert.ToInt32(GetConfigValue(config["passwordAttemptWindow"], "10"));
      _minRequiredNonAlphaNumericCharacters = Convert.ToInt32(GetConfigValue(config["minRequiredAlphaNumericCharacters"], "1"));
      _minRequiredPasswordLength = Convert.ToInt32(GetConfigValue(config["minRequiredPasswordLength"], "7"));
      _passwordStregthRegularExpression = Convert.ToString(GetConfigValue(config["passwordStrengthRegularExpression"], String.Empty));
      _enablePasswordReset = Convert.ToBoolean(GetConfigValue(config["enablePasswordReset"], "true"));
      _enablePasswordRetrieval = Convert.ToBoolean(GetConfigValue(config["enablePasswordRetrieval"], "true"));
      _requiredQuestionAndAnswer = Convert.ToBoolean(GetConfigValue(config["requiresQuestionAndAnswer"], "false"));
      _requiredUniqueEmail = Convert.ToBoolean(GetConfigValue(config["requiresUniqueEmail"], "true"));
  
      string temp_format = config["passwordFormat"];
      if (temp_format == null)
      {
          temp_format = "Hashed";
      }
  
      switch (temp_format)
      {
          case "Hashed":
              _passwordFormat = MembershipPasswordFormat.Hashed;
              break;
          case "Encrypted":
              _passwordFormat = MembershipPasswordFormat.Encrypted;
              break;
          case "Clear":
              _passwordFormat = MembershipPasswordFormat.Clear;
              break;
          default:
              throw new ProviderException("Password format not supported.");
      }
  
      ConnectionStringSettings _connectionStringSettings = ConfigurationManager.ConnectionStrings[config["connectionStringName"]];
  
      if (_connectionStringSettings == null || _connectionStringSettings.ConnectionString.Length == 0)
      {
          throw new ProviderException("Connection String Cannot Be Blank.");
      }
  
      _connectionString = _connectionStringSettings.ConnectionString;
  
      //Get Encryption and Decryption Key Information From the Information.
  
      System.Configuration.Configuration cfg = WebConfigurationManager.OpenWebConfiguration(System.Web.Hosting.HostingEnvironment.ApplicationVirtualPath);
      _machinekey = cfg.GetSection("system.web/machineKey") as MachineKeySection;
  
      if (_machinekey.ValidationKey.Contains("AutoGenerate"))
      {
          if (PasswordFormat != MembershipPasswordFormat.Clear)
          {
              throw new ProviderException("Hashed or Encrypted passwords are not supported with auto-generated keys.");
          }
      }
  
  }
  </code></pre>
  
  <p>And I have noticed that the Initialize method was not called, I read through the questions here and the people were saying I do not have to call that manually, if I have wired up my web.config correctly, I don't have to do anything, but I do tried to call that manually, but it gave me an InvalidCastException when I was trying to cast NameValueCollection.</p>
  
  <p>Can anyone help me? Thanks</p>