Возникли проблемы при импорте интерфейса C# в Python
Сегодня я много занимался поиском и чтением, и не нашел правильного способа что-то реализовать или даже определить, возможно ли это.
Вот суть того, что я пытаюсь прямо сейчас. У меня есть приложение, которое загружает плагины через 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
s. Я всегда получаю следующую ошибку:
ImportException occurred
No module named MyInterfaces
Я загрузил Process Monitor, чтобы увидеть, что мое приложение пытается загрузить, когда я выполняю свой сценарий, и оно пытается загрузить файл с именем MyInterfaces, а затем попытается загрузить MyInterfaces.py. Ну, файл называется MyInterfaces *.dll*, поэтому я изменил свой оператор импорта, чтобы читать import MyInterfaces.dll
, но это не имело никакого эффекта - мой код все равно будет пытаться загрузить файл с именем MyInterfaces. Я подтвердил, что все мои зависимости находятся в нужной папке.
Я чувствую себя очень хромым из-за того, что не могу понять это, поэтому я надеюсь, что кто-то может указать мне правильное направление. Спасибо!
1 ответ
Я считаю, что правильный подход будет:
import clr
clr.AddReference('MyInterfaces')
from Company.Shared.MyInterfaces import IDevice