Continue from this solution : How to configure Ninject for MVC4 & custom Membership provide?
I declare
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);
}
And implement within 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;
}
}
[..]
Now within 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);
}
[...]
Now within Controller
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);
}
}
Note:
1. I got the Error Provider name is Null from UserRepository CreateUser method from this line return new MembershipUser(providername,...);.
But I already pass it as Membership.Provider.Name within customMembership provider.
2. What is the proper way to call Membershipprovider method from Controller ?
3. Is the any other Ninject configuration required to call Membership provider method via IUserRepository, other that bellow ?
kernel.Bind<IUserRepository>().To<UserRepository>();
4. Web.config as previous post