0

我正在实现自己的会员提供者。我使用了存储库模式。

public interface IMembershipService: IDisposable
{
    void CreateUser(string username, string password, string email, string role);
    bool CheckUsernameExist(string username);
    string EncodePassword(string originalPassword,string salt);
    // Some other my admin methods
}
public class MembershipService : IMembershipService
{
    public MembershipService()
    {
    }
    public void ActivateUserAccount(string username, string email)
    {
        // Some validation code
    }
    public void CreateUser(string username, string password, string email, string role)
    {
        // Some validation code
    }
   }

我没有继承 MembershipProvider。现在,我想知道如何实现返回当前登录用户的 GetUser()。我对此一无所知。第二件事,通过继承 MembershipProvider,我可以使用 GetUser() 或其他一些有用的方法吗?如果我想这样做,我也不能继承那个类。请指导我,不要投反对票,因为这个问题的答案对我来说最重要。谢谢

4

3 回答 3

1

如果要创建自定义 ASP.NET Membership 提供程序,则必须从抽象 MembershipProvider 类继承。如果不是,它将不适合整个 ASP.NET 提供程序模型。

要实现成员资格提供程序,您需要创建一个从 System.Web.Security 命名空间继承 MembershipProvider 抽象类的类。MembershipProvider 抽象类从 System.Configuration.Provider 命名空间继承 ProviderBase 抽象类,因此您还必须实现 ProviderBase 类的必需成员。

http://msdn.microsoft.com/en-us/library/f1kyba5e(v=vs.100).aspx

您将需要覆盖所有方法并提供您自己的数据访问权限。这是 ODBC 提供程序实现的示例代码

于 2013-06-13T15:09:40.347 回答
0

我推荐这个库: Code First MembershipProvider。只需将数据库查询替换为对存储库的调用即可。

于 2013-06-13T15:08:20.923 回答
0

您正朝着正确的方向前进,您现在要做的就是拥有MembershipService两个工具IMembershipServiceMembershipProvider然后您可以执行以下操作:

public class MembershipService : MembershipProvider, IMembershipService
{
    private readonly IUserRepository _userRep; // or whatever you are calling your user repository

    public MembershipService()
       : this(DependencyResolver.Current.GetService<IUserRepository>())
    {
    }

    public MembershipService(IUserRepository userRep)
    {
       this._userRep = userRep;
    }

    public override MembershipUser GetUser(string username, bool userIsOnline)
    {
    ...

您的IMembershipService接口应该实现MembershipProvider您计划使用的所有类。然后,您可以将您的注入IMembershipService到您的控制器中。

于 2013-06-13T15:17:33.687 回答