是否可以将DataAnnotations与接口一起使用?

Bru*_*uno 24 .net c# data-annotations

我想使用DataAnnotations来验证实现某些接口的类,因此我将验证属性添加到接口,如下所示:

public interface IUser
{
    [Required]
    string Name { get; set; }

    [Display(Name = "Email Address")]
    [Required]
    string Email { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

我尝试使用它时不起作用Validator.TryValidateObject.

有没有办法做到这一点而不必编写自定义TryValidateObject方法?

Eri*_*ips 42

我很惊讶没有人提到MetadataTypeAttribute.但是,是的,这有效.

[MetadataType(typeof(ICustomerMetaData))]
public partial class Customer
{
}


public interface ICustomerMetaData
{
  // Apply RequiredAttribute
  [Required(ErrorMessage = "Title is required.")]
  string Title { get; }
}
Run Code Online (Sandbox Code Playgroud)

至于直接使用接口(使用Customer: ICustomerMetaData):

产品团队不希望实现此功能,原因有两个:

•与DataAnnotations.Validator的一致性

•与ASP.Net MVC中的验证行为保持一致

•棘手的场景:一个类实现了两个具有相同属性但具有相互冲突属性的接口.哪个属性优先?

  • 没有人提到它,因为这只适用于部分类,问题是关于接口的。请检查您自己的链接上的文档。 (2认同)

Lee*_*unn 6

如果您使用基类而不是接口,则属性将正常工作。