Yes you can . And here is another article illustrating this. You can do this even in a console application by manually creating a ValidationContext :
public class DataAnnotationsValidator { public bool TryValidate(object @object, out ICollection<ValidationResult> results) { var context = new ValidationContext(@object, serviceProvider: null, items: null); results = new List<ValidationResult>(); return Validator.TryValidateObject( @object, context, results, validateAllProperties: true ); } }
UPDATE:
Here is an example:
public class Recipe { [Required] [CustomValidation(typeof(AWValidation), "ValidateId", ErrorMessage = "nima")] public int Name { get; set; } } public class AWValidation { public static ValidationResult ValidateId(int ProductID) { if (ProductID > 2) { return new ValidationResult("wrong"); } else { return ValidationResult.Success; } } } class Program { static void Main() { var recipe = new Recipe(); recipe.Name = 3; var context = new ValidationContext(recipe, serviceProvider: null, items: null); var results = new List<ValidationResult>(); var isValid = Validator.TryValidateObject(recipe, context, results, true); if (!isValid) { foreach (var validationResult in results) { Console.WriteLine(validationResult.ErrorMessage); } } } }
Note that the ValidateId method must be public static and return a ValidationResult instead of boolean. Also note the fourth argument passed to the TryValidateObject method, which should be set to true if you want your custom validators to be evaluated.
source share