Сегодня я много искал и читал, но так и не понял, как правильно что-то реализовать или даже определить, возможно ли это.
Вот суть того, что я пытаюсь сделать прямо сейчас. У меня есть приложение, которое загружает плагины через MEF. Плагины могут реализовывать различные интерфейсы, и, скажем, у меня есть один, который называется IDevice
. У меня была эта дурацкая идея, что, возможно, пользователь захочет написать свой собственный плагин для устройств на IronPython, и его IronPython просто должен будет наследоваться от IDevice
и реализовать необходимые методы.
Теперь я знаю, что можно реализовать интерфейс в IronPython, определив такой класс:
class MyDevice(IDevice):
pass
Но я не могу решить первую проблему - как правильно импортировать интерфейс?
Интерфейс IDevice определяется в отдельной сборке с именем 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. Я подтвердил, что все мои зависимости находятся в нужной папке.
Я чувствую себя очень хромым из-за того, что не могу понять это, поэтому я надеюсь, что кто-то может указать мне правильное направление. Благодарю вас!