Pregunta

Estoy construyendo un membresía personalizado más precisamente la función getUser.

Por lo tanto, tengo un membresía personalizado.

public class CustomMemberShipUser : MembershipUser
{
    public CustomMemberShipUser (
        string providerName,
        string email,
        object providerUserKey,
        string name,
        string passwordQuestion,
        string comment,
        bool isApproved,
        bool isLockedOut,
        DateTime creationDate,
        DateTime lastLoginDate,
        DateTime lastActivityDate,
        DateTime lastPasswordChangedDate,
        DateTime lastLockoutDate
        ): base(
            providerName, email, providerUserKey, name, passwordQuestion,
            comment, isApproved, isLockedOut, creationDate, lastLoginDate,
            lastActivityDate, lastPasswordChangedDate, lastLockoutDate)
    {
    }
}

En la función GetUser de Membershipprovider, obtengo los datos del usuario y los pongo en el custommembershipuser.

public override MembershipUser GetUser(string email, bool userIsOnline)
    {
        User u = _db.Users.Where(x => x.Email == email).First();
        CustomMemberShipUser customUser = new CustomMemberShipUser (
                                        "CustomMemberShipUser ",
                                        u.Email, 
                                        u.id,
                                        u.Email, 
                                        "", 
                                        "", 
                                        true, 
                                        false, 
                                        u.CreateDate, 
                                        DateTime.MinValue, 
                                        DateTime.MinValue, 
                                        DateTime.MinValue, 
                                        DateTime.MinValue);
        return customUser ;
    }

Como puede ver, uso el correo electrónico como nombre para la membresía y no necesito la mayoría de los otros parámetros.

¿Hay alguna manera de simplificar la llamada? No quiero initalizar el membresía con cadenas vacías y valores de fecha mínimos.

Gracias por adelantado

¿Fue útil?

Solución

¿Podrías adaptar tu custommembershipuser para hacer el 'relleno' por ti?

   public class CustomMemberShipUser : MembershipUser
    {
        public CustomMemberShipUser (
            string email,
            object providerUserKey,
            ): base(
                "CustomMemberShipUser", email, providerUserKey, email, String.Empty,
                String.Empty, true, false, DateTime.MinValue, DateTime.MinValue,
                DateTime.MinValue, DateTime.MinValue, DateTime.MinValue)
        {
        }
    }

No resuelve el problema, pero ordenará a su proveedor que se convertirá en

public override MembershipUser GetUser(string email, bool userIsOnline)
    {
        User u = _db.Users.Where(x => x.Email == email).First();
        CustomMemberShipUser customUser = new CustomMemberShipUser (u.Email, u.id);
        return customUser ;
    }

Supongo que su custommembershebershipUser está exponiendo algunas propiedades adicionales que no nos está mostrando. Tal como está, solo podría devolver un membresía. Con el anterior, el único beneficio que le brinda su custommembershebershershipUser es la construcción más limpia en su custommembershipprovider

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top