1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies. Weitere Informationen

PropertyInfo in Attribute

Dieses Thema im Forum ".NET Application und Service Design" wurde erstellt von 10110010, 26. Oktober 2016.

  1. 10110010

    10110010 Mitglied

    Hallo,

    ich habe ein Attribute gebaut, mit dem ich eine Property an eine Spalte in einer Datenbank Binde.
    Dem Attribut kann ich im Konstruktor den Spaltennamen angeben. Jetzt möchte ich aber, dass wenn kein Expliziter Name angegeben wurde, dass dann der PropertyName benutzt werden soll.

    Komme ich in dem Attribute irgendwie an die PropertyInfo?

    Code (C#):
    1. //Mit Spaltenangabe
    2. [Column("Foo")]
    3. public string Text { get; set; }
    4.  
    5. //Das Attribbute soll jetzt "Bar" verwenden
    6. [Column()]
    7. public string Bar { get; set; }
     
  2. Spyke

    Spyke Capoeirista Premium-User

    Ist das deine eigene erstellte Attribute Klasse oder das aus System.ComponentModel.DataAnnotation?

    Ich kenne das Attribute aus System.ComponentModel.DataAnnotation nicht, aber so wie ichs les, müssten die microsoft eigenen automatismen damit umgehen können.

    Wie wertest du das Attribute aus?
     
  3. 10110010

    10110010 Mitglied

    Das ist ein eigenes Attribute, dass natürlich von Attribute ableitet.
    In einer anderen Klasse übergebe ich einen Typ, in dem ich die Properties mit den Attributen versehen habe und lasse mir alle Attribute geben.
    Aus denen verwende ich dann die Eigenschaften um eine SQL-Query zu erstellen.

    Ich muss demnach in dem Konstruktor des Attributes die Zugehörige Property Kennen um dessen Namen zu ermitteln und diesen in eine Attribute-Property ab zu legen, damit die dann vorhanden ist.

    Der Konstruktor meines Attributes sieht dann etwa so aus:
    Code (C#):
    1. public MyAttribute():base()
    2. {
    3.    this.Column = [Property.Name]; // Der Name von der zugehörigen Eigenschaft!
    4. }
    5. public MyAttribute(string column):base()
    6. {
    7.    this.Column = column;
    8. }
     
  4. Spyke

    Spyke Capoeirista Premium-User

    Ich würde an der stelle an der du das Attribute auswertest prüfen ob Column gesetzt ist.

    Sprich nicht über das Attribute steuern, sondern dort wo du die Query auswerten/erstellen willst.
    Dort müsstest du ja PropertyDescriptor, PropertyInfo oder der gleichen zur Verfügung haben aus dem du den Namen ziehen kannst.
     
  5. 10110010

    10110010 Mitglied

    So mach ich es im Moment, aber cooler währe es, wenn ich das nicht müsste.

    Was ich bisher gefunden habe ist das hier:
    Code (C#):
    1. protected virtual void OnPropertyChanged([CallerMemberName] string propertyName=null)
    2. {
    3.     var del = PropertyChanged;
    4.     if (del != null)
    5.     {
    6.         del(this, new PropertyChangedEventArgs(propertyName));
    7.     }
    8. }
    Aber das geht nicht mit Attributen.
     
  6. 10110010

    10110010 Mitglied

    Funktioniert doch, wie oben beschrieben!
     
  7. 10110010

    10110010 Mitglied

    again... Tests haben ergeben, dass dies nicht funktioniert in meinem Fall.
     
  8. Spyke

    Spyke Capoeirista Premium-User

    Anders wirst du nicht drum herum kommen.
    Attribute wissen nixs von der Eigenschaft wo sie hängen.

    Die werden sogar meines wissens statisch gehalten, aber da bin ich mir gerade nicht ganz sicher.
     
Die Seite wird geladen...
Ähnliche Themen - PropertyInfo Attribute
  1. Thomas Darimont
    Antworten:
    8
    Aufrufe:
    2.508