このソリューションの続き: MVC4 およびカスタム メンバーシップ プロバイダー用に Ninject を構成する方法は?
私は宣言する
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 プロバイダー内
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 メソッドからエラー Provider name is Nullを取得しました。return new MembershipUser(providername,...);
しかし、私はすでにcustomMembershipプロバイダーMembership.Provider.Name
内でそれを渡しています。
2. ControllerからMembershipproviderメソッドを呼び出す適切な方法は何ですか?
3. IUserRepositoryを介してメンバーシップ プロバイダー メソッドを呼び出すために必要なその他のNinject構成はありますか?
kernel.Bind<IUserRepository>().To<UserRepository>();
4.前の投稿のWeb.config