我的解决方案中有3个项目:
1- ExporterLib(类库)
2- ImporterApp(WPF应用程序)
3- SharedLib(类库)
前两个项目引用“SharedLib”,其中包含一个名为ISharedClass
的接口。
在“ImporterApp”中,我有一个名为ClassA的类:
public class ClassA
{
[Import] private ISharedClass part;
}
在“ExporterLib”中,我有一个名为SharedClassExport的类:
[Export(ISharedClass)]
public class SharedClassExport : ISharedClass
{
//....
}
在ImporterApp中,我使用DirectoryCatalog引用ExporterLib.dll文件和容器。但是当我尝试使用容器编写ClassA实例的部分时,我收到一个异常说:
1)未找到与约束匹配的导出: ContractName SharedLib.ISharedClass RequiredTypeIdentity SharedLib.ISharedClass
当我使用调试器查看目录中的部分时,我看到了正确的 SharedClassExport 部分,但它没有引用ISharedClass!
我该怎么办?
P.S。 :我想使用MEF,我不想将这些项目合并在一起。
提前致谢。
内容:
//如果指定合同类型可能很重要 你想导出一个基本类型以外的类型, 比如接口。
答案 0 :(得分:2)
请尝试使用[导出(typeof(ISharedClass))]。如果要导出基本类型以外的类型(例如接口),则使用typeof指定完整的合同类型很重要。要匹配导出使用[导入(typeof(ISharedClass))]。如果没有,请告诉我,如果没有,请提供您正在使用的DirectoryCatalog组合逻辑?
答案 1 :(得分:0)
构建后检查ImporterApp的bin文件夹。我愿意下注ExporterLib.dll不在该文件夹中。由于ExporterLib.dll不是ImporterApp的直接依赖项,因此MSBuild不会在构建时将其复制到ImporterApp的bin文件夹。要解决此问题,您可以选择以下几种方法: