使用属性validation
我有,比方说,这个简单的类:
public class User { [Required(AllowEmptyStrings = false, ErrorMessage="EmailIsRequired"] public string EmailAddress { get; set; } }
我知道如何在System.ComponentModel.DataAnnotations命名空间中使用Validator.TryValidateProperty和Validator.TryValidateObject。 为了使其工作,您需要要validation的对象的实际实例。
但是现在,我想要在没有User类实例的情况下validation某个值,例如:
TryValidateValue(typeof(User), "EmailAddress", "test@test.com");
我的目标是在实际必须实例化对象本身之前测试一个值(原因是我只允许创建有效的域实体)。 所以实际上我想在类而不是实例上使用validation属性。
有什么想法可以做到吗?
谢谢!
编辑:同时我决定不使用数据注释,而是使用http://fluentvalidation.codeplex.com,以便validation移出实体之外。 这样,可以从实体内部以及我的命令处理程序中触发validation。 由于流利的符号,validation本身看起来更具可读性。
以下是如何使用TryValidateValue方法的示例 :
public class User { [Required(AllowEmptyStrings = false, ErrorMessage = "EmailIsRequired")] public string EmailAddress { get; set; } } class Program { static void Main() { var value = "test@test.com"; var context = new ValidationContext(value, null, null); var results = new List(); var attributes = typeof(User) .GetProperty("EmailAddress") .GetCustomAttributes(false) .OfType() .ToArray(); if (!Validator.TryValidateValue(value, context, results, attributes)) { foreach (var result in results) { Console.WriteLine(result.ErrorMessage); } } else { Console.WriteLine("{0} is valid", value); } } }