Je développe une application écrite en C# qui héberge IronPython. Ce que je prévois, c'est que les utilisateurs vont écrire des scripts Python, qui contiennent des classes implémentant une interface prédéfinie.Demande de scripts IronPython pour les interfaces dans un environnement hébergé
Quelque chose comme:
Define interface code C#:
public interface IPlugin
{
void DoSomething();
}
implémentent l'interface en code python. Dans mon application, je charge le script python et j'exécute les méthodes implémentées par les classes dans ces scripts.
Je veux savoir: comment obtenir un handle pour toutes les classes qui implémentent l'interface spécifiée dans le script python?
Par exemple, si je devais faire tout cela en C#, je dois réfléchir pour me aider et je peux saillir charger l'assemblage et aller quelque chose comme:
Assembly assembly = Assembly.LoadFrom("plugin.dll");
Type[] types = assembly.GetTypes();
foreach(Type type in types)
{
foreach(Type interfaceType in type.GetInterface())
{
if(interfaceType == typeof(IPlugin))
{
// gotcha, invoke interface specific methods
}
}
}
Comment puis-je faire la même chose, quand au lieu d'une assemblée, j'ai affaire à un script IronPython? Je sais qu'en utilisant ObjectOperations et le ScriptScope, je peux obtenir un traitement à la classe, si je connais son nom - as described here - mais je cherche quelque chose de plus robuste.
Convenu, sauf que Rohit peut vouloir utiliser l'interface pour différencier entre les classes qu'il veut appeler et classes d'aide. – Greg
Oui, Greg m'a parlé. – Rohit
Mais il veut utiliser ces objets Python * à partir * d'un langage typé statiquement où il * doit * être capable de différencier le type. – fuzzyman