2010-12-05 4 views
0

사용자 지정 유효성 검사를 처리하는 더 나은 방법이 있으면 알려주십시오. 이 서비스 레이어를 원하지 않습니다.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); 
    } 
} 

답변

관련 문제