2010-11-10 4 views
0

Я делал кучу поиска и чтения сегодня, и не понял, как правильно реализовать что-либо или даже определить, возможно ли это.Проблемы с импортом интерфейса C# в Python

Вот суть того, что я пытаюсь прямо сейчас. У меня есть приложение, которое загружает плагины через MEF. Плагины могут реализовывать различные интерфейсы, и, скажем, у меня один называется IDevice. У меня была эта дурацкая идея, что, возможно, пользователь захочет написать свой собственный плагин Device в IronPython, и его IronPython просто должен наследовать от IDevice и реализовать требуемые методы.

Теперь я знаю, что это можно реализовать интерфейс в IronPython, определив класс, как это:

class MyDevice(IDevice): 
    pass 

Но я не могу пройти мимо первой проблемы - то, что правильный способ импортировать интерфейс?

Интерфейс чтения компакт-дисков определяется в отдельной сборке под названием MyInterfaces.dll так:

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

Я попытался import MyInterfaces так как это наиболее логичная вещь, но это не сработало. Я также попробовал много менее логичных комбинаций import s и from s. Я всегда получаю следующее сообщение об ошибке:

ImportException occurred 
No module named MyInterfaces 

Я загрузил Process Monitor, чтобы увидеть, что мое приложение пытается загрузить, когда я выполнил свой сценарий, и он пытается загрузить файл с именем MyInterfaces, а затем попытается загрузить MyInterfaces.py. Ну, файл называется MyInterfaces * .dll *, поэтому я изменил свой оператор импорта на import MyInterfaces.dll, но это не повлияло - мой код все равно попытается загрузить файл MyInterfaces. Я подтвердил, что все мои зависимости находятся в правильной папке.

Я чувствую себя слишком хромым за то, что не смог понять это, поэтому я надеюсь, что кто-то может указать мне в правильном направлении. Спасибо!

ответ

4

Я считаю, что правильный подход будет:

import clr 
clr.AddReference('MyInterfaces') 

from Company.Shared.MyInterfaces import IDevice 
+0

тьфу ... Я видел, что используется во многих примерах, приведенных в этой книге, но это просто не щелкнул для меня. Я попробую это сейчас, спасибо! – Dave

+0

Нет проблем, надеюсь, что это сработает ... Я почти ничего не знаю о IronPython, но я имею в виду Гуглера. :) – cdhowie

+0

мужчина ... :) спасибо. – Dave

Смежные вопросы