2010-03-07 14 views
14

Można użyć TypeDescriptor.AddAttributes, aby dodać atrybut do typu w środowisku wykonawczym. Jak zrobić to samo dla metody i parametru? (może 2 oddzielne pytania ...)Programowo dodaj atrybut do metody lub parametru

+0

W jakich sytuacjach chcesz wyświetlać atrybuty? – SLaks

+0

Do refleksji, stąd zauważyłem, że nawet TypeDescriptor.AddAttribute nie działa na to. – MatteS

Odpowiedz

17

TypeDescriptor.AddAttributes dotyczy tylko konkretnego przypadku użycia bardzo konkretny; tj. z zakresu od System.ComponentModel. Dla odbicia reszta wie, nic o tym, że o dodatkowy atrybut. I rzeczywiście, System.ComponentModel tak naprawdę nie ma zastosowania do metod lub parametrów.

Krótko mówiąc; nie możesz. Będziesz musiał przechowywać te informacje w innym miejscu (na zamówienie) lub dodać je podczas kompilacji.

+0

Aha, dzięki za informację. – MatteS

+0

@ Mark Gravell, Wszelkie obejście, aby dodać metadane nieruchomości w projekcie Silverlight (gdzie 'TypeDescriptor' i' TypeDescriptionProvider' nie są zaimplementowane? – Shimmy

+0

@Shimmy nie tak daleko, jak wiem, nr –

0

Jak wynika z analizy klasy TypeDescriptor w odbłyśniku, metoda .AddAttributes wewnętrznie wywołuje metodę .AddProvider. Przesłana do niej instancja TypeDescriptionProvider jest faktycznie odpowiedzialna za dostarczanie metadanych. Możesz spróbować dodać atrybut [TypeDescriptionProviderAttribute] do swojej klasy i zaimplementować własnego dostawcę, korzystając z klasy TypeDescriptionProvider. Zgodnie z dokumentacją, poprzez przesłonięcie TypeDescriptionProvider.CreateInstance, można podać zastępczy obiekt, którego typ ma wszystkie niezbędne atrybuty. Podejrzewam, że atrybuty zastosowane do metod wewnątrz typu substytucji również zostaną uwzględnione. Jednak nie próbowałem tego samemu, więc możesz eksperymentować ...

Powiązane problemy