Расширение .NET MembershipUser с собственными свойствами - PullRequest
9 голосов
/ 29 апреля 2011

Я написал пользовательский MembershipProvider, который отлично работает, кроме одной мелочи, я бы хотел немного расширить класс MembershipUser.

По умолчанию выглядит так:

MembershipUser member = new MembershipUser(
    providerName: Membership.Provider.Name,
    name: db.userName,
    providerUserKey: null,
    email: db.userEmail,
    passwordQuestion: "",
    comment: "",
    isApproved: true,
    isLockedOut: false,
    creationDate: db.creationDate,
    lastLoginDate: db.lastLoginDate,
    lastActivityDate: db.lastActivityDate,
    lastPasswordChangedDate: DateTime.Now,
    lastLockoutDate: DateTime.Now
    );

Но я бы хотел немного его расширить, примерно так:

MembershipUser member = new MembershipUser(
    providerName: Membership.Provider.Name,
    name: db.userName,
    guid: db.userGuid,
    company: db.companyName,
    companyGuid: db.companyGuid,
    whatever: db.whatever,
    providerUserKey: null,
    email: db.userEmail,
    passwordQuestion: "",
    comment: "",
    isApproved: true,
    isLockedOut: false,
    creationDate: db.creationDate,
    lastLoginDate: db.lastLoginDate,
    lastActivityDate: db.lastActivityDate,
    lastPasswordChangedDate: DateTime.Now,
    lastLockoutDate: DateTime.Now
    );

Есть ли способ расширить класс по умолчанию?

Ответы [ 3 ]

8 голосов
/ 29 апреля 2011

Конечно!

Просто создайте класс, который расширяет MembershipUser:

public class CustomUser : MembershipUser
{
    // your custom properties/methods go here
}

В вашем CustomMembershipProvider вы можете вернуть свой CustomUser объект.Вам просто нужно привести клиентское приложение к CustomUser.Вот так:

var myUserObject = Membership.GetUser() as CustomUser;
4 голосов
/ 29 апреля 2011

MembershipUser не является запечатанным классом, поэтому вы можете просто создать новый класс, который наследуется от него.Сохраните существующую функциональность и добавляйте только те дополнительные материалы, которые вам нужны.

Если вы его расширите, вам придется либо написать собственного провайдера членства, который возвращает ваш новый класс, либо преобразовать из одного в другой послекаждый звонок в провайдеры по умолчанию.

2 голосов
/ 30 апреля 2011
  • Создайте свой собственный провайдер, наследуйте от System.Web.Security.MembershipProvider
  • Создайте свою собственную информацию о членстве, наследуйте от System.Web.Security.MembershipUser
  • Верните свой класс из CreateUser(), GetUser() и т. Д.
...