从此解决方案继续:How to configure Ninject for MVC4 & custom Membership provide?
我声明
public interface IUserRepository : IRepository<UserModel>
{
MembershipUser CreateUser(string username, ... , string providername = null);
void Logout();
Boolean Login(string userName, string Password, bool persistCookie = false);
bool RegisterUser(UserModel user);
}
并在UserRepository中实现
public class UserRepository : RepositoryBase<MyDbContext, UserModel>, IUserRepository
{
UserModel _user = null;
public UserRepository(IUnitOfWork<MyDbContext> unitOfWork)
: base(unitOfWork)
{
}
public MembershipUser CreateUser(string username, ... , string providername = null)
{
using (UnitOfWork)
{
_user = new UserModel
{
Id = Guid.NewGuid(),
RoleId = roleId
[other property set]
};
Insert(_user);
UnitOfWork.Commit();
}
status = MembershipCreateStatus.Success;
return new MembershipUser(providername, ...);
}
public bool RegisterUser(UserModel user)
{
MembershipCreateStatus createStatus;
CreateUser(user.UserName, user.Password, user.Email, user.PasswordQuestion, user.PasswordAnswer, user.IsApproved, null, out createStatus, ...);
if (createStatus == MembershipCreateStatus.Success)
{
return true;
}
else
{ return false;
}
}
[..]
现在在 CustomMembership Provider 中
public class CustomMembershipProvider : MembershipProvider
{
public IUserRepository UserRepository { get { return DependencyResolver.Current.GetService<IUserRepository>(); } }
public override MembershipUser CreateUser(string username, ...)
{
return UserRepository.CreateUser(username, password, email, passwordQuestion, passwordAnswer, isApproved, providerUserKey, out status, Membership.Provider.Name);
}
[...]
现在在控制器中
public AccountController(IAccountRepository accountRepository, IUserRepository userRepository, IUnitOfWork<MyDbContext> unitOfWork)
{
_acountRepository = accountRepository;
_userRepository = userRepository;
UnitOfWork = unitOfWork;
}
public ActionResult Register(UserModel model)
{
if (ModelState.IsValid)
{
_userRepository.RegisterUser(model);
}
}
笔记:
1.我从这一行 的 UserRepository CreateUser 方法中得到 Error Provider name is Null。return new MembershipUser(providername,...);
但我已经Membership.Provider.Name
在customMembership提供程序中传递了它。
2.从Controller调用Membershipprovider方法的正确方法是什么?
3.是否需要通过IUserRepository调用 Membership 提供程序方法的任何其他Ninject配置,除此之外?
kernel.Bind<IUserRepository>().To<UserRepository>();
4. Web.config 如上一篇文章