2011-07-29 14 views
5

Czy istnieje sposób uzyskania dostępu do nazwy klasy i właściwości, do której przypisano właściwość wewnątrz atrybutu?Uzyskiwanie dostępu do nazwy klasy i właściwości wewnątrz atrybutu

Na przykład

public class User { 
    public string Email { get; set; } 
    public string FirstName { get; set; } 

    [MyAttrubute] 
    public string LastName { get; set; } 
} 

A potem w MyAttribute klasy

public class MyAttributeAttribute { 
    public MyAttributeAttribute() : base() { 
     string className = /*GET CLASS NAME - should return "User" */ 
     string propertyName = /*GET PROPERTY NAME - should return LastName*/ 
    } 
} 

wiem, może przejść w informacjach w konstruktorze, ale nadzieją, istnieje prosty sposób niektóre, jak zaoszczędzić na ponowne wpisywanie informacji w kółko przez odbicie lub ...

Odpowiedz

7

Przepraszam, ale nie, to nie jest możliwe. Można też utworzyć atrybut z dowolnego miejsca. Nawet po to ważny sposób, aby utworzyć wystąpienie:

var att = new MyAttribute(); 

Twoje pytanie można by sprowadzić do „Czy mogę wykryć, gdzie jest mój zwyczaj klasa jest tworzony z?”. W moim ostatnim przykładzie prawdopodobnie można by użyć StackTrace. Ale z atrybutami są one tworzone przez środowisko wykonawcze .NET, więc nie będziesz mógł wybrać tej trasy.

+1

Nie jestem pewien, czy podążam za twoim rozumowaniem (chociaż ostateczna odpowiedź może być nadal taka sama). Każdy atrybut jest własną instancją klasy MyAttribute, więc każdy może przyjmować inną wartość w swoim konstruktorze i przechowywać ją lokalnie. Fakt, że może ozdobić wiele właściwości, nie może być powodem, dla którego nie mogę uchwycić dekorowanej klasy/własności. Pomyślałem, że może istnieć sposób w czasie wykonywania, aby określić, która klasa/proprety to wystąpienie atrybutu zostało dołączone. – Peter

+0

@Peter - Przepraszam, wyjaśniłem swoją odpowiedź. – CodeNaked

Powiązane problemy