接口成员的属性不起作用

在我的应用程序中,有几个模型需要Password属性(例如, RegistrationChangePassword模型)。 Password属性具有DataTypeRequired等属性。 因此,为了确保可重用性的一致性,我创建了:

 interface IPasswordContainer{ [Required(ErrorMessage = "Please specify your password")] [DataType(DataType.Password)] string Password { get; set; } } 

 class RegistrationModel : IPasswordContainer { public string Password { get; set; } } 

不幸的是,属性不起作用。

然后我尝试将界面更改为类:

 public class PasswordContainer { [Required(ErrorMessage = "Please specify your password")] [DataType(DataType.Password)] public virtual string Password { get; set; } } 

 public class RegistrationModel : PasswordContainer { public override string Password { get; set; } } 

现在它正在运作。 为什么会这样?

为什么属性在从类inheritance时工作但在从接口inheritance时不工作?

接口属性上的属性不会inheritance到类,您可以将接口设置为抽象类。

从微软找到答案 :

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

  • 与DataAnnotations.Validator的一致性
  • 与ASP.Net MVC中的validation行为保持一致
  • 棘手的场景:一个类实现两个具有相同属性的接口,但它们具有冲突的属性。 哪个属性优先?