2010-11-10 30 views
0

J'ai fait beaucoup de recherches et de lectures aujourd'hui, et je n'ai pas encore trouvé la bonne façon d'implémenter quelque chose, ou même de déterminer si c'est possible.J'ai de la difficulté à importer l'interface C# en Python

Voici l'essentiel de ce que je tente en ce moment. J'ai une application qui charge des plugins via MEF. Les plugins peuvent implémenter une variété d'interfaces, et disons que j'en ai un appelé IDevice. J'ai eu cette idée farfelue que peut-être un utilisateur voudrait écrire son propre plugin Device dans IronPython, et son IronPython aurait juste à hériter de IDevice et implémenter les méthodes requises.

Maintenant, je sais qu'il est possible de mettre en œuvre l'interface IronPython en définissant une classe comme ceci:

class MyDevice(IDevice): 
    pass 

Mais je ne peux pas passer le premier problème - ce qui est la bonne façon d'importer l'interface?

L'interface iDevice est définie dans un ensemble séparé appelé MyInterfaces.dll comme ceci:

namespace Company.Shared.MyInterfaces 
{ 
    public interface IDevice 
    { 
     string GetName(); 
    } 
} 

J'ai essayé import MyInterfaces puisque c'est la chose la plus logique, mais cela ne fonctionne pas. J'ai également essayé de nombreuses combinaisons moins logiques de import s et from s. Je reçois toujours l'erreur suivante:

ImportException occurred 
No module named MyInterfaces 

I chargé Process Monitor pour voir ce que mon application a essayé de charger quand j'exécuté mon script, et il a été en train de charger un fichier appelé MyInterfaces, et je puis essayer de charger MyInterfaces.py. Eh bien, le fichier s'appelle MyInterfaces * .dll *, donc j'ai changé mon instruction import pour lire import MyInterfaces.dll, mais cela n'a eu aucun effet - mon code essayait toujours de charger un fichier appelé MyInterfaces. J'ai confirmé que toutes mes dépendances sont dans le bon dossier.

Je me sens super boiteux de ne pas être capable de comprendre cela, alors j'espère que quelqu'un peut me diriger dans la bonne direction. Je vous remercie!

Répondre

4

Je crois que l'approche correcte serait:

import clr 
clr.AddReference('MyInterfaces') 

from Company.Shared.MyInterfaces import IDevice 
+0

ugh ... J'ai vu qui a utilisé dans un grand nombre des exemples dans le livre, mais il n'a tout simplement pas cliquer pour moi. Je vais essayer ça maintenant, merci! – Dave

+0

Pas de problème, j'espère que ça marche ... Je ne sais presque rien sur IronPython, mais je suis un méchant Googler. :) – cdhowie

+0

l'homme ... :) merci. – Dave