2011-09-01 76 views

回答

4

不,它不是。但是您可以使用Repository模式或类似模式在其上面使用自己的抽象,然后在应用程序中使用您自己的User模型。

public UserRepository : IUserRepository 
{ 
    private MembershipProvider provider; 
    private UserAdapter userAdapter; 

    public UserService(MembershipProvider provider, UserAdapter userAdapter) 
    { 
     this.provider = provider; 
     this.userAdapter = userAdapter; 
    } 

    public MyUser GetUser(string email) 
    { 
     MembershipUser user = provider.GetUser(username, false); 
     MyUser myUser= userAdapter.Map(user); 
     return myUser; 
    } 
} 
+0

感谢您的示例。尽管我决定不使用ASP.NET成员资格结构,但您回答我的问题“是否可以在不使用MembershipUser类的情况下创建自定义MembershipProvider?” –

+0

@JohanVauhkonen得到同样的问题,我认为最简单的解决方案是创建我们自己的系统。您可以轻松地重现会员供应商的行为,但需要一点工作。 – Rushino

0

您可以创建自定义memembership供应商不使用/从取决于您使用会员用户继承。如果您没有使用内置的createuser方法(该用户是在另一个源系统中创建的),那么您确实不需要成员资格用户对象。否则,只需使用其他属性创建另一个从membershipuser继承的对象。

+0

您是指会员用户?我是说不要继承会员用户而不是提供商。我看到我的措辞可能会有点混乱。我的意思是使用自定义成员资格提供程序,但如果不需要,则不会真正使用成员资格用户对象。 –

1

如果你真的想在ASP.NET Membership构架中内建你的提供者,你应该。

Membership.Provider返回抽象MembershipProvider还含有:

public abstract MembershipUser CreateUser(..); 
public abstract MembershipUser GetUser(..); 

等方法返回MembershipUser类。

+0

谢谢,我已经知道如何实现抽象MembershipProvider。我对学习感兴趣的是,如果可以省略MembershipUser并将其他成员基础设施一起使用。显然不是。 –

0

这是我的解决方案

customerUser.cs

public class DZMembership 
{ 
    public virtual Guid Id { get; set; } 
    public virtual string UserName { get; set; } 
    public virtual string Password { get; set; } 
    public virtual DateTime TimeCreated { get; set; } 

} 

customerProvider.cs

public class DZMembershipProvider : MembershipProvider 
{ 

    IDALMembership dal = DalFactory.GetDalMembership(); 
    #region override of membership provider 
    public override string ApplicationName 
    { 
     get 
     { 
      throw new NotImplementedException(); 
     } 
     set 
     { 
      throw new NotImplementedException(); 
     } 
    } 

    public override bool ChangePassword(string username, string oldPassword, string newPassword) 
    { 
     DZMembership member = dal.GetMemberByName(username); 
     string encryptedOldPsw = FormsAuthentication.HashPasswordForStoringInConfigFile(oldPassword, "MD5"); 
     string encryptedNewPsw = FormsAuthentication.HashPasswordForStoringInConfigFile(newPassword, "MD5"); 
     if (member.Password != encryptedOldPsw) return false; 
     member.Password = encryptedNewPsw; 
     dal.ChangePassword(member); 
     return true; 
    } 
public override MembershipUser GetUser(string username, bool userIsOnline) 
    { 

     DZMembership user = dal.GetMemberByName(username); 
     if (user == null) return null; 
     MembershipUser mu = new MembershipUser("DZMembershipProvider", 
      username, user.Id, "", "", string.Empty, 
      true, true, DateTime.Now, 
      DateTime.Now, DateTime.Now, DateTime.Now, DateTime.Now); 
     return mu; 

    } 

当方法需要返回一个类型的MembershipUser,建立一个新的与客户用户的信息来源。在大多数情况下,它会没事的。因为内置的控件(login,loginstatus)不需要比这些更多。但我建议通过继承MembershipUser来定制你自己的用户,其他属性不会咬你,但缺乏会。

相关问题