2012-08-24 16 views
17

Uygulamanızda çeşitli modellerde Password özellikleri (ör. Registration ve ChangePassword modelleri) gerekir. Password özelliği, DataType ve Required gibi özelliklere sahiptir. Bu nedenle yeniden kullanılabilirlik, bir tutarlılık içinde sağlamak için, benim yarattığım:Arabirim üyeleri üzerinde öznitelik çalışmıyor

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

Ve

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

Maalesef nitelikleri çalışmaz.

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

Ve

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

Şimdi çalışıyor

:

Sonra bir sınıfa arayüzü değişiyor çalıştı. Neden böyle?

Öznitelik, sınıftan miras alındığında ancak arabirimden miras alındığında çalışmadığında neden çalışıyor?

+0

http://stackoverflow.com/questions/540749/can-ac-sharp-class-inherit-attributes-from-its-interface – KyorCode

+0

http://bradwilson.typepad.com/blog/2011 /08/interface-attributes-class-attributes.html ayrıca yararlı – KyorCode

+0

@KyorCode: Aradığınız ilk yorumu siz yazarken bulamadım. İlgili sorular listesinde bile yok. Bu soruyu hak ettiğiniz sorunun tam olarak aynısı olarak işaretledim. – Mohayemin

cevap

20

Arabirim özelliklerine ilişkin öznitelikler, sınıfa devralınmaz, arabiriminizi bir Özet Sınıfı haline getirebilirsiniz.

Bulunan bir answer from Microsoft: doğrulama davranış ile DataAnnotations.Validator

  • Tutarlılık ile

    • Tutarlılık:

      ürün ekibi iki ana nedenden dolayı, bu özelliği uygulamak istemiyor ASP.Net MVC

    • Zorlu senaryo: Bir sınıf aynı özelliği taşıyan iki arabirimi uygular ancak Onları ting nitelikleri. Hangi özniteliği önceliğe sahip olur?
  • +3

    Kısmen anlaşılsa da, oldukça hayal kırıklığı yaratıyor. Bana ne mantıklı gelmiyor: Neden birden fazla miras mülkiyet özelliklerine sahip bir konu olmalı, ancak metod öznitelikleriyle değil mi? Dil tasarımı, neden dili temel alan ASP.Net MVC gibi belirli bir çerçeveden etkilenmeli? – chiccodoro

    +10

    Bu, sırayla, mantıklı davranır çünkü öznitelikleri davranış ekler ve arabirimlerin davranışı tanımlaması gerekmez. Bir arabirimi uygulayan bir sınıf bunu yapmalıdır. – chiccodoro

    +7

    @chiccodoro davranış tanımlamazlar. meta bilgi sağlarlar. Tek başına bir öznitelik ek kod olmadan hiçbir etki yapmaz ve dolayısıyla davranışı tanımlamaz. Bu özellik için mevcut olmayan mazeretler yapalım. – Dbl