日期:2010-07-12  浏览次数:20401 次

专题八的上篇大致讨论了MemberRole中的Membership实现,对于运用Membership进行web开发足够,但是对于想更深入了解Membership实现机理的朋友那是远远不够的,这个专题我们更深入一下了解Membership。

其实MemberRole是一个非常好的资源包,借住Reflector这个优秀的工具,你可以对其进行代码分析。它无论是在组建的构架、代码的设计、数据库表的建立、存储过程的使用等都是非常优秀的,你是程序员也好构架师也罢,其中可以学习的真的很多很多,我在整个分析的过程中也深深受益。

由于MemberRole中的Membership只实现了对SQL Server的操Provider类,即SqlMembershipProvider类。因此我们从SqlMembershipProvider开始分析。Provider模型在上篇已经做过介绍,SqlMembershipProvider类继承了MembershipProvider,并实现其所有的抽象方法。在分析之前先看两个类:MembershipUser与MembershipUserCollection。

MembershipUser,先看看代码:(代码中省略的具体实现,只有方法与属性名称)

public class MembershipUser
{
      // Methods
      protected MembershipUser();
      public MembershipUser(MembershipProvider provider, string name, object providerUserKey, string email, string passwordQuestion, string comment, bool isApproved, bool isLockedOut, DateTime creationDate, DateTime lastLoginDate, DateTime lastActivityDate, DateTime lastPasswordChangedDate, DateTime lastLockoutDate);
      public virtual bool ChangePassword(string oldPassword, string newPassword);
      public virtual bool ChangePasswordQuestionAndAnswer(string password, string newPasswordQuestion, string newPasswordAnswer);
      public virtual string GetPassword();
      public virtual string GetPassword(string passwordAnswer);
      public virtual string ResetPassword();
      public virtual string ResetPassword(string passwordAnswer);
      public override string ToString();
      public virtual bool UnlockUser();
      internal virtual void Update();
      private void UpdateSelf();
      // Properties
      public virtual string Comment { get; set; }
      public virtual DateTime CreationDate { get; }
      public virtual string Email { get; set; }
      public virtual bool IsApproved { get; set; }
      public virtual bool IsLockedOut { get; }
      public bool IsOnline { get; }
      public virtual DateTime LastActivityDate { get; set; }
      public virtual DateTime LastLockoutDate { get; }
      public virtual DateTime LastLoginDate { get; set; }
      public virtual DateTime LastPasswordChangedDate { get; }
      public virtual string PasswordQuestion { get; }
      public virtual MembershipProvider Provider { get; }
      public virtual object ProviderUserKey { get; }
      public virtual string UserName { get; }
      // Fields
      private string _Comment;
      private DateTime _CreationDate;
      private string _Email;
      private bool _IsApproved;
      private bool _IsLockedOut;
      private DateTime _LastActivityDate;
      private DateTime _LastLockoutDate;
      private DateTime _LastLoginDate;
      private DateTime _LastPasswordChangedDate;
      private string _PasswordQuestion;
      private MembershipProvider _Provider;
      private object _ProviderUserKey;
  &nbs