我正在实现自己的会员提供者。我使用了存储库模式。
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()或其他一些有用的方法吗?如果我想这样做,我也不能继承那个班级。 请指导我,不要因为这个问题的答案最重要。 感谢
答案 0 :(得分:1)
如果要创建自定义ASP.NET成员资格提供程序,必须从抽象MembershipProvider类继承。如果没有,它将不适合整个ASP.NET Providers模型。
要实现成员资格提供程序,请创建一个继承的类 System.Web.Security中的MembershipProvider抽象类 命名空间。 MembershipProvider抽象类继承了 System.Configuration.Provider中的ProviderBase抽象类 命名空间,所以你必须实现所需的成员 ProviderBase类也是如此。
http://msdn.microsoft.com/en-us/library/f1kyba5e(v=vs.100).aspx
您需要覆盖所有方法并提供自己的数据访问权限。 这是example code for an ODBC Provider Implementation。
答案 1 :(得分:0)
我推荐这个库: Code First MembershipProvider。只需用对存储库的调用替换数据库查询。
答案 2 :(得分:0)
您正走在正确的轨道上,您现在要做的就是让MembershipService
实施IMembershipService
和MembershipProvider
,然后您可以执行以下操作:
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
注入控制器。