/// <summary>
        /// 新しいメンバーシップユーザーをデータソースに追加します。
        /// </summary>
        /// <returns>
        /// 新しく作成されたユーザーの情報が格納された <see cref="T:System.Web.Security.MembershipUser"/> オブジェクト。
        /// </returns>
        /// <param name="username">新しいユーザーのユーザー名。</param>
        /// <param name="password">新しいユーザーのパスワード。</param>
        /// <param name="email">新しいユーザーの電子メール アドレス。</param>
        /// <param name="passwordQuestion">新しいユーザーのパスワードの質問。</param>
        /// <param name="passwordAnswer">新しいユーザーのパスワードの解答。</param>
        /// <param name="isApproved">新しいユーザーを承認するかどうか。</param>
        /// <param name="providerUserKey">メンバーシップ データ ソースでのユーザーの一意の識別子。</param>
        /// <param name="status">ユーザーが正常に作成されたかどうかを示す <see cref="T:System.Web.Security.MembershipCreateStatus"/> 列挙値。</param>
        public override MembershipUser CreateUser(string username, string password, string email, string passwordQuestion, string passwordAnswer, bool isApproved, object providerUserKey, out MembershipCreateStatus status)
        {
            status = MembershipCreateStatus.ProviderError;

            // パスワードの保護
            var securePassword = new SecureString();
            securePassword.AppendString(password);

            // 認証の作成
            var membership = new DomainModels.Membership(
                new MembershipEntity
                    {
                        Name = username,
                        Password = securePassword,
                    });
            var result = MembershipCreateStatus.ProviderError;
            membership.Created += (sender, entity) => { result = MembershipCreateStatus.Success; };
            membership.Create();
            status = result;

            var user = default (KandaMembershipUser);
            membership.Found += (sender, entity) => { user = new KandaMembershipUser(entity); };
            membership.Find();

            return user;
        }
        public void AppendStringFact()
        {
            const string S = @"朧";
            var secureString = new SecureString();
            secureString.AppendString(S);

            var s = secureString.GetString();

            Assert.Equal(S, s);
        }
        /// <summary>
        /// 指定のユーザー名とパスワードがデータソースに存在しているかどうかを検証します。
        /// </summary>
        /// <returns>
        /// 指定したユーザー名とパスワードが有効な場合は true。それ以外の場合は false。
        /// </returns>
        /// <param name="username">検証対象のユーザー名。</param>
        /// <param name="password">指定したユーザーのパスワード。</param>
        public override bool ValidateUser(string username, string password)
        {
            // 文字列の保護
            var secure = new SecureString();
            secure.AppendString(password);

            // Name、Password 検証
            var entity = new MembershipEntity
                             {
                                 Name = username,
                                 Password = secure,
                             };
            var membership = new DomainModels.Membership(entity);
            membership.Find();

            return (0 < membership.ID);
        }