2010-12-05 7 views
0

Wenn Sie besser Ansatz, um benutzerdefinierte Validierung zu behandeln haben, lassen Sie es mich bitte wissen. Ich möchte keine Service-Ebene dafür bitte.Benutzerdefinierte Validierung für doppelten Benutzernamen in der DB

Lesen Sie unten 5. Option was ich will.

Ich habe

1 - IUserRepository -> bool IsUserRegistered(string userName); 

2 - UserRepository mit Method

readonly EFDBContainer _db = new EFDBContainer(); 
public bool IsUserRegistered(string userName) 
{ 
    return _db.Users.Any(d => d.UserName == userName); 
} 

3 - Ninject -> Usercontroller ist DI

public static void RegisterServices(IKernel kernel) 
{ 
    kernel.Bind<IUserRepository>().To<UserRepositary>(); 
} 

4 - Usercontroller

private readonly IUserRepository _repository; 
public ProfileController(IUserRepository repository) 
{ 
    _repository = repository; 
} 

Create-Methode auf Controller-

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; 
} 

Methode aus Repository erstellen

public void Create(User user) 
{ 
    user.EnsureValid(); --> Go to User object and do validation 
    //Add object to DB 
} 

5 - Was ich will:

Hier möchte ich DI so dass ich Rufen Sie die 1. IsUserRegistered-Schnittstellenmethode für User-Objekt auf ect IsUserRegistrated unten funktioniert nicht jetzt. Ich brauche einen Weg, um die Interface-Attribut

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); 
    } 
} 

Antwort