사용자 지정 유효성 검사를 처리하는 더 나은 방법이 있으면 알려주십시오. 이 서비스 레이어를 원하지 않습니다.DB의 중복 사용자 이름에 대한 사용자 지정 유효성 검사
아래 다섯 번째 옵션을 읽으십시오.
나는
1 - IUserRepository -> bool IsUserRegistered(string userName);
2가 - Ninject에 - - 방법
readonly EFDBContainer _db = new EFDBContainer();
public bool IsUserRegistered(string userName)
{
return _db.Users.Any(d => d.UserName == userName);
}
3 UserRepository UserController
-> UserController을public static void RegisterServices(IKernel kernel)
{
kernel.Bind<IUserRepository>().To<UserRepositary>();
}
4 DI
입니다private readonly IUserRepository _repository;
public ProfileController(IUserRepository repository)
{
_repository = repository;
}
컨트롤러에 방법을 만들기
HttpPost]
public ActionResult Create(string confirmButton, User user)
{
if (ModelState.IsValid)
{
try
{
_repository.Create(user); --> This calling Create Method below before this EnsureValid is Called
return //Do Redirection
}
catch (RuleViolationException)
{
this.UpdateModelStateWithViolations(user, ViewData.ModelState);
}
}
return //to View;
}
저장소에서 방법을 만들기
public void Create(User user)
{
user.EnsureValid(); --> Go to User object and do validation
//Add object to DB
}
5 - 내가 원하는 것은 : 다음
내가 DI를 원하는 나는 할 수 있도록 User obj에서 첫 번째 IsUserRegistered 인터페이스 메서드 호출 ect 아래 IsUserRegistered가 작동하지 않습니다. 나는 당신의 자신의 유효성 검사 속성을 쓰기 인터페이스를
public partial class User: IRuleEntity
{
public List<RuleViolation> GetRuleViolations()
{
List<RuleViolation> validationIssues = new List<RuleViolation>();
if (IsUserRegistered(userName))
validationIssues.Add(new RuleViolation("UserName", UserName, "Username already exists. Please enter a different user name."));
return validationIssues;
}
public void EnsureValid()
{
List<RuleViolation> issues = GetRuleViolations();
if (issues.Count != 0)
throw new RuleViolationException("Business Rule Violations", issues);
}
}