2010-12-05 40 views
0

Si vous avez une meilleure approche pour gérer la validation personnalisée, faites-le moi savoir. Je ne veux pas de couche de service pour ça s'il vous plait.Validation personnalisée pour le nom d'utilisateur en double dans la base de données

Lire ci-dessous 5ème option ce que je veux.

je

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

2 - UserRepository avec la méthode

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

3 - Ninject -> UserController est DI

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

4 - UserController

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

Créer méthode sur le contrôleur

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

Créer méthode de dépôt

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

5 - Ce que je veux:

Ici, je veux DI afin que je puisse appeler la première méthode d'interface IsUserRegistered sur l'obj utilisateur ect IsUserRegistered ci-dessous ne fonctionne pas pour le moment. J'ai besoin d'un moyen d'utiliser l'interface

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

Répondre