Возникли проблемы при импорте интерфейса C # в Python - PullRequest
0 голосов
/ 10 ноября 2010

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

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

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

class MyDevice(IDevice):
  pass

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

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

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

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

ImportException occurred
No module named MyInterfaces

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

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

1 Ответ

4 голосов
/ 10 ноября 2010

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

import clr
clr.AddReference('MyInterfaces')

from Company.Shared.MyInterfaces import IDevice
...