自定义数据注释继承以实现可重用性
Custom Data Annotations inheritance for reusablity
假设您有一个 class 和一个 属性 用于电子邮件,带有一些数据注释
public class Person
{
[Display(Name = "Email address")]
[Required(ErrorMessage = "The email address is required")]
[EmailAddress(ErrorMessage = "Invalid Email Address")]
[CustomDataAnnotation()]
public string Email { get; set; }
}
现在您需要另一个 class 的电子邮件 属性 和相同的数据注释
public class Invoice
{
[Display(Name = "Email address")]
[Required(ErrorMessage = "The email address is required")]
[EmailAddress(ErrorMessage = "Invalid Email Address")]
[CustomDataAnnotation()]
public string Email { get; set; }
}
有没有办法创建一个继承所有其他数据注释的新数据注释 [MyEmail]?像这样
[Display(Name = "Email address")]
[Required(ErrorMessage = "The email address is required")]
[EmailAddress(ErrorMessage = "Invalid Email Address")]
[CustomDataAnnotation()]
public DataAnnoation MyEmail {get;set;}
然后可以像这样重复使用它。
public class Person
{
[MyEmail]
public string Email { get; set; }
}
public class Invoice
{
[MyEmail]
public string Email { get; set; }
}
我知道可以使用摘要 class,但我不喜欢将电子邮件 属性 隐藏在另一个 class 中,这样更难阅读。
public abstract class MyEmail
{
[Display(Name = "Email address")]
[Required(ErrorMessage = "The email address is required")]
[EmailAddress(ErrorMessage = "Invalid Email Address")]
[CustomDataAnnotation()]
public string Email { get; set; }
}
public class Person : MyEmail {}
public class Invoice : MyEmail { }
任何使数据注释更具可重用性的建议都将受到赞赏。
您可以在 Person 和 Invoice class 之上使用 [MetadataType]
属性来使用您的 MyEmail
class data.annatotaions 属性。您可以像下面这样实现。
[MetadataType(typeof(MyEmail))]
public class Person
{
public string Email { get; set; }
}
[MetadataType(typeof(MyEmail))]
public class Invoice
{
public string Email { get; set; }
}
public abstract class MyEmail
{
[Display(Name = "Email address")]
[Required(ErrorMessage = "The email address is required")]
[EmailAddress(ErrorMessage = "Invalid Email Address")]
[CustomDataAnnotation()]
public string Email { get; set; }
}
假设您有一个 class 和一个 属性 用于电子邮件,带有一些数据注释
public class Person
{
[Display(Name = "Email address")]
[Required(ErrorMessage = "The email address is required")]
[EmailAddress(ErrorMessage = "Invalid Email Address")]
[CustomDataAnnotation()]
public string Email { get; set; }
}
现在您需要另一个 class 的电子邮件 属性 和相同的数据注释
public class Invoice
{
[Display(Name = "Email address")]
[Required(ErrorMessage = "The email address is required")]
[EmailAddress(ErrorMessage = "Invalid Email Address")]
[CustomDataAnnotation()]
public string Email { get; set; }
}
有没有办法创建一个继承所有其他数据注释的新数据注释 [MyEmail]?像这样
[Display(Name = "Email address")]
[Required(ErrorMessage = "The email address is required")]
[EmailAddress(ErrorMessage = "Invalid Email Address")]
[CustomDataAnnotation()]
public DataAnnoation MyEmail {get;set;}
然后可以像这样重复使用它。
public class Person
{
[MyEmail]
public string Email { get; set; }
}
public class Invoice
{
[MyEmail]
public string Email { get; set; }
}
我知道可以使用摘要 class,但我不喜欢将电子邮件 属性 隐藏在另一个 class 中,这样更难阅读。
public abstract class MyEmail
{
[Display(Name = "Email address")]
[Required(ErrorMessage = "The email address is required")]
[EmailAddress(ErrorMessage = "Invalid Email Address")]
[CustomDataAnnotation()]
public string Email { get; set; }
}
public class Person : MyEmail {}
public class Invoice : MyEmail { }
任何使数据注释更具可重用性的建议都将受到赞赏。
您可以在 Person 和 Invoice class 之上使用 [MetadataType]
属性来使用您的 MyEmail
class data.annatotaions 属性。您可以像下面这样实现。
[MetadataType(typeof(MyEmail))]
public class Person
{
public string Email { get; set; }
}
[MetadataType(typeof(MyEmail))]
public class Invoice
{
public string Email { get; set; }
}
public abstract class MyEmail
{
[Display(Name = "Email address")]
[Required(ErrorMessage = "The email address is required")]
[EmailAddress(ErrorMessage = "Invalid Email Address")]
[CustomDataAnnotation()]
public string Email { get; set; }
}