El atributo en los miembros de la interfaz no funciona

En mi aplicación, varios modelos necesitan propiedades de Password (por ejemplo, modelos de Registration y ChangePassword ). La propiedad Password tiene atributos como DataType y Required . Por lo tanto, para garantizar la consistencia de la reutilización, creé:

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

Y

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

Lamentablemente, los atributos no funcionan.

Luego traté de cambiar la interfaz a una clase:

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

Y

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

Ahora está funcionando. ¿Por qué es así?

¿Por qué los atributos funcionan cuando se heredan de la clase pero no funcionan cuando se heredan de la interfaz?

Los atributos de las propiedades de la interfaz no se heredan en la clase, puede hacer que su interfaz sea una clase abstracta.

Encontré una respuesta de Microsoft :

El equipo del producto no desea implementar esta característica, por dos razones principales:

  • Coherencia con DataAnnotations.Validator
  • Coherencia con el comportamiento de validación en ASP.Net MVC
  • Escenario difícil: una clase implementa dos interfaces que tienen la misma propiedad, pero con atributos contradictorios en ellas. ¿Qué atributo tendría prioridad?