2010-09-14 11 views
0

J'ai des classes appelées BillingActivity, DevelopmentActivity, ResearchActivity qui mettent en œuvre IActivity.Récupère l'attribut nom/chaîne d'une classe avec l'attribut

Quelque part dans mon application, j'énumère une DLL contenant tous les types. Vérifiez si typeof (IActivity) .IsAssignable (type) si donc je veux obtenir la chaîne typeDescription = type.Attribute.Value ou similaire ce que je veux est de mettre un attribut sur une classe OU sur les classes ci-dessus (dépend de ce que vous faites des suggestions ou quelles solutions sont possibles) comme

[ActivityType = "Billing"]. 
public class BillingActivity {} 

Je ne veux pas une instance de ce type, je veux juste obtenir la description (attribut `valeur s).

Comment puis-je faire cela? Quelqu'un peut-il me pousser dans la bonne direction s'il vous plaît?

Répondre

1

Créer un attribut personnalisé avec une seule propriété de chaîne, marquer vos classes avec elle, puis GetCustomAttributes pour tester une classe particulière est marquée avec l'attribut, et si elle est que vous pouvez lire la propriété de tirer le nom ensemble.

public class ActivityTypeAttribute : Attribute 
{ 
public Name { get; set; } 
} 

[ActivityType(Name="MyClass")] 
public class MyClass { } 

... 
{ 
ActivityTypeAttribute att = (ActivityTypeAttribute)Attribute.GetCustomAttribute(typeof(MyClass), typeof(ActivityTypeAttribute)); 

    Debug.Assert(att.Name == "MyClass"); 
} 
... 

Edition - Aussi, s'il vous plaît lire ce

What's the simplest most elegant way to utilize a custom attribute

+0

Quand j'écris ceci [ActivityType (Name = "MyClass")] sur MyClass il ne peut pas être résolu? Ma classe ne devrait-elle pas hériter de l'attribut? – Elisabeth

+0

Non, la classe d'attributs personnalisés est la seule qui doit hériter de l'attribut. Pouvez-vous poster un exemple de ce que vous voyez? – asawyer

+0

Tout a bien réglé! :) – Elisabeth

0
ActivityType result = 
    (ActivityType)Attribute.GetCustomAttribute(this.GetType(), typeof(ActivityType));