Methode et reflection

Le
Delf
Bonjour.

J'ai une application WinForm qui doit appeler dynamiquement une méthode
static d'une classe static qui est contenue dans une assembly externe.

Cette assembly externe contient 1 unique classe static composée d'une
seule méthode static.

La WinForm n'a pas de référence sur cette assembly.

Ma question : est-il possible d'invoquer cette méthode sans en
connaitre le type de sa classe via Reflection ?

Je pensais à quelque chose du genre :

Assemply ass = Assemply.Load();
Type type = ass.GetTypes()[0];

t.CallMethod("MyMethod", new object[] { 'param1", 123 });

où CallMethod() serait une méthode magique :)

Au pire je peux rendre cette classe instanciable s'il le faut vraiment.
Merci.
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Patrice
Le #20179121
Bonjour,

Pour l'appel voir par exemple
http://msdn.microsoft.com/fr-fr/library/system.reflection.methodbase.invoke(VS.80).aspx
(et sans doute GetMethod pour trouver la méthode concernée à partir du
type).

Accessoirement, une explication de ce que l'on veut faire pourrait aider à
donner des conseils plus pertinents. Si par exemple c'est pour faire un
système de "plugin" il serait au moins possible d'utiliser une interface ce
qui permettrait de pouvoir inclure d'autres types dans l'assembly plutôt que
de prendre systématiquement le premier qui nous tombe sous la main (et il y
a même toute une infrastructure dans .NET sur le sujet).

--
Patrice


"Delf" news:4ab495d4$0$23517$
Bonjour.

J'ai une application WinForm qui doit appeler dynamiquement une méthode
static d'une classe static qui est contenue dans une assembly externe.

Cette assembly externe contient 1 unique classe static composée d'une
seule méthode static.

La WinForm n'a pas de référence sur cette assembly.

Ma question : est-il possible d'invoquer cette méthode sans en connaitre
le type de sa classe via Reflection ?

Je pensais à quelque chose du genre :

Assemply ass = Assemply.Load(...);
Type type = ass.GetTypes()[0];

t.CallMethod("MyMethod", new object[] { 'param1", 123 });

où CallMethod() serait une méthode magique :)

Au pire je peux rendre cette classe instanciable s'il le faut vraiment.
Merci.




Delf
Le #20186951
Patrice a formulé ce samedi :

Pour l'appel voir par exemple
http://msdn.microsoft.com/fr-fr/library/system.reflection.methodbase.invoke(VS.80).aspx
(et sans doute GetMethod pour trouver la méthode concernée à partir du type).

Accessoirement, une explication de ce que l'on veut faire pourrait aider à
donner des conseils plus pertinents. Si par exemple c'est pour faire un
système de "plugin" il serait au moins possible d'utiliser une interface ce
qui permettrait de pouvoir inclure d'autres types dans l'assembly plutôt que
de prendre systématiquement le premier qui nous tombe sous la main (et il y a
même toute une infrastructure dans .NET sur le sujet).



Je suis passé par une interface finalement.
Merci.
Publicité
Poster une réponse
Anonyme