4 Stimmen

Benutzerdefinierter MembershipUser mit nur den benötigten Parametern

Ich baue einen benutzerdefinierten MembershipProvider, genauer gesagt die GetUser-Funktion.

Dafür habe ich einen eigenen MembershipUser.

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

In der GetUser Funktion des MembershipProviders hole ich mir die Benutzerdaten und füge sie in den CustomMemberShipUser ein.

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

Wie Sie sehen können, verwende ich die E-Mail als Namen für das MemberShip und die meisten anderen Parameter brauche ich nicht.

Gibt es eine Möglichkeit, den Anruf zu vereinfachen? Ich möchte den MembershipUser nicht mit leeren Strings und minimalen Datumswerten initialisieren.

Vielen Dank im Voraus

4voto

NinjaNye Punkte 6788

Könnten Sie Ihren CustomMembershipUser so anpassen, dass er das "Auffüllen" für Sie übernimmt?

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

Das Problem wird dadurch nicht gelöst, aber Ihr Provider wird aufgeräumt, und das wird

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

Ich nehme an, dass Ihr CustomMembershipUser einige zusätzliche Eigenschaften offenlegt, die Sie uns nicht zeigen. So wie es aussieht, könnten Sie einfach einen MembershipUser zurückgeben. Damit ist der einzige Vorteil, den Ihr CustomMembershipUser Ihnen bietet, die sauberere Konstruktion in Ihrem CustomMembershipProvider

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X