Trouver des méthodes qui ont l'attribut personnalisé à l'aide de la réflexion
J'ai un attribut personnalisé:
public class MenuItemAttribute : Attribute
{
}
et une classe avec quelques méthodes:
public class HelloWorld
{
[MenuItemAttribute]
public void Shout()
{
}
[MenuItemAttribute]
public void Cry()
{
}
public void RunLikeHell()
{
}
}
Comment puis-je obtenir uniquement les méthodes qui sont décorées avec l'attribut personnalisé?
Jusqu'à présent, j'ai ceci:
string assemblyName = fileInfo.FullName;
byte[] assemblyBytes = File.ReadAllBytes(assemblyName);
Assembly assembly = Assembly.Load(assemblyBytes);
foreach (Type type in assembly.GetTypes())
{
System.Attribute[] attributes = System.Attribute.GetCustomAttributes(type);
foreach (Attribute attribute in attributes)
{
if (attribute is MenuItemAttribute)
{
//Get me the method info
//MethodInfo[] methods = attribute.GetType().GetMethods();
}
}
}
Ce dont j'ai besoin maintenant est d'obtenir le nom de la méthode, le type de retour, ainsi que les paramètres qu'il accepte.
Vous devez vous connecter pour publier un commentaire.
Votre code est complètement faux.
Vous êtes en boucle par tous les type qui a l'attribut, qui ne sera pas trouver tous les types.
Vous avez besoin d'une boucle sur chaque méthode sur chaque type et de vérifier si elle a votre attribut.
Par exemple:
.Any()
ne va pas aider.Maintenant, vous avez toutes les méthodes avec cet attribut 'MyAttibute' dans la classe. Vous pouvez appeler de n'importe où.