我有一个基于MEF的模块化应用程序,它已经开始无法导入类。在调试过程中,我一直在使用mefx
工具来尝试追踪核心问题。简而言之,我的所有[Export]
声明似乎都是正确的,但似乎没有正确处理Import
或ImportMany
属性。
希望这对我来说是一个简单的错误,但应用程序直到最近才开始工作。
这是我编写的一个非常短的测试应用程序以及相应的mefx
输出。
using System.ComponentModel.Composition;
namespace ClassLibrary1
{
public class Class1
{
[Import]
public Class2 myclass;
}
[Export]
public class Class2
{
}
}
mexf
输出
> mefx /file:ClassLibrary1.dll /parts
ClassLibrary1.Class2
> mefx /file:ClassLibrary1.dll /exports
ClassLibrary1.Class2
> mefx /file:ClassLibrary1.dll /imports
[blank]
我原本希望将Class1
列为导入者。建议?
答案 0 :(得分:0)
您无法导入未被MEF引用的类。
尝试:
namespace ClassLibrary1
{
[Export]
public class Class1
{
[Import]
public Class2 myclass;
}
[Export]
public class Class2
{
}
}
您也可以在构造函数中导入它:
namespace ClassLibrary1
{
[Export]
public class Class1
{
[ImportingConstructor]
public Class1(Class2 c2)
{
myclass = c2;
}
public Class2 myclass;
}
[Export]
public class Class2
{
}
}
另外,使用ServiceLocator获取Class1(不要使用“new”关键字)。
Class1 myClass1 = ServiceLocator.Current.GetExport<Class1>();