使用属性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); } } }