我今天一直在做一堆搜索和阅读,并没有找到正确的方法来实现某些东西,甚至没有确定是否可能。
这是我现在正在尝试的要点。我有一个通过MEF加载插件的应用程序。插件可以实现各种接口,假设我有一个名为IDevice
的接口。我有这个古怪的想法,也许用户可能想在IronPython中编写自己的Device插件,而他的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语句更改为import MyInterfaces.dll
,但这没有效果 - 我的代码仍然只是尝试加载文件叫做MyInterfaces。我已确认所有依赖项都在正确的文件夹中。
由于无法弄清楚这一点,我感到非常蹩脚,所以我希望有人可以指出我正确的方向。谢谢!
答案 0 :(得分:4)
我相信正确的方法是:
import clr
clr.AddReference('MyInterfaces')
from Company.Shared.MyInterfaces import IDevice