Domanda

Sto costruendo un MembershipProvider personalizzato con insistenza il compito GetUser.

Perciò ho una MembershipUser personalizzato.

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)
    {
    }
}

Nella funzione GetUser del MembershipProvider ottengo i dati dell'utente e li metto nella 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 ;
    }

Come si può vedere io uso la posta elettronica come nome per l'iscrizione e non ho bisogno la maggior parte degli altri parametri.

C'è un modo per rendere più semplice la chiamata? Non voglio per inizializzare il MembershipUser con i valori Strings e minimale Data vuote.

Grazie in anticipo

È stato utile?

Soluzione

Può adattare il CustomMembershipUser di fare il 'padding' per voi

   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)
        {
        }
    }

E 'non risolve il problema ma sarà riordinare il vostro fornitore che diventerà

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 ;
    }

Presumo vostro CustomMembershipUser sta esponendo alcune proprietà aggiuntive che non si sta mostrando noi. Così com'è si può solo restituire un MembershipUser. Con quanto sopra l'unico beneficio vostro CustomMembershipUser ti dà è la costruzione più pulita nel vostro CustomMembershipProvider

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top