public override MembershipUser CreateUser(string username, string password, string email,
                                                  string passwordQuestion, string passwordAnswer, bool isApproved,
                                                  object providerUserKey, out MembershipCreateStatus status)
        {
            var e = new ValidatePasswordEventArgs(username, password, true);

            OnValidatingPassword(e);
            if (e.Cancel)
            {
                status = MembershipCreateStatus.InvalidPassword;
                return(null);
            }
            if (RequiresUniqueEmail && !string.IsNullOrEmpty(GetUserNameByEmail(email)))
            {
                status = MembershipCreateStatus.DuplicateEmail;
                return(null);
            }
            if (SystemUserWrapper.FindByLoginID(username) != null)
            {
                status = MembershipCreateStatus.DuplicateUserName;
                return(null);
            }

            var user = new SystemUserWrapper
            {
                UserName         = username,
                UserLoginID      = username,
                UserPassword     = EncodePassword(password, machineKey.ValidationKey),
                PasswordFormat   = ((int)PasswordFormat),
                PasswordSalt     = machineKey.ValidationKey,
                UserEmail        = email,
                PasswordQuestion = passwordQuestion,
                PasswordAnswer   = passwordAnswer,
                IsApproved       = isApproved
            };

            user.UserCreateDate = DateTime.Now;
            user.FailedPwdAnsAttemptWndStart = DateTime.Parse("1753-1-1");
            user.LastPasswordChangeDate      = DateTime.Parse("1753-1-1");
            user.LastLoginDate            = DateTime.Parse("1753-1-1");
            user.FailedPwdAttemptWndStart = DateTime.Parse("1753-1-1");
            user.LastActivityDate         = DateTime.Parse("1753-1-1");
            user.LastLockedOutDate        = DateTime.Parse("1753-1-1");
            user.Applications.Add(application);
            try
            {
                SystemUserWrapper.Save(user, SystemUserWrapper.GetDeveUserID());
                status = MembershipCreateStatus.Success;
            }
            catch (Exception exception)
            {
                throw NhibernateMembershipProviderExceptionUtil.NewProviderException(this,
                                                                                     NHibernateProviderSR.
                                                                                     User_UnableToCreate,
                                                                                     exception);
            }
            return(GetUser(username, false));
        }