Да, вы можете .И вот другая статья , иллюстрирующая это.Вы можете сделать это даже в консольном приложении, создав вручную 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
);
}
}
ОБНОВЛЕНИЕ:
Вот пример:
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);
}
}
}
}
Обратите внимание, что метод ValidateId
должен быть public static и возвращать ValidationResult
вместо логического значения.Также обратите внимание на четвертый аргумент, передаваемый методу TryValidateObject
, который должен быть установлен в true, если вы хотите, чтобы ваши пользовательские валидаторы оценивались.