title: ASP.NET MVC Custom Validation in View Model Best Practice
body: <p>I am trying to use a combination of Domain Driven Design with Test Driven Development for this application I am building in ASP.NET MVC 3. My archictecture is set up with Repositories, Domain Models, View Models, Controllers and Views. All validation will be handled in the view model. I set up my view model to inherit from "IValidatableObject" so that my validation attributes and my custom validation that i set up in the "Validate" method are both executed when my controller method calls "ModelState.IsValid". The problem I am running into is accessing my repository in the Validate method of my view model. I need to access the repository to check for duplicate records in the database. It seems like the best idea would be to create a property of IRepository type and set that property by passing injecting my repository into the constructor of the view model. For example:</p>
  
  <pre><code>public class UserViewModel : IValidatableObject
  {
         public UserViewModel(User user, IUserRepository userRepository)
         {
                FirstName = user.FirstName;
                LastName = user.LastName;
                UserRepository = userRepository;
                UserName = user.UserName;
         }
         public string UserName { get; set; }
         public string FirstName { get; set; }
         public string LastName { get; set; }
         public IUserRepository UserRepository { get; set; }
         public IEnumerable&lt;ValidationResult&gt; Validate()
         {
             UserCriteria criteria = new UserCriteria { UserName = this.UserName };
             IList&lt;User&gt; users = UserRepository.SearchUsers(criteria);
  
             if (users != null &amp;&amp; users.count() &gt; 0)
             {
                 yield return new ValidationResult("User with username " + this.UserName + " already exists."
             }
         }
  }
  </code></pre>
  
  <p>Do you guys think this is a good idea?</p>