C# MEF容器无法从共享部件组成零件
我的解决方案中有3个项目: 1-ExporterLib(类库) 2-ImporterApp(WPF应用) 3-SharedLib(类库) 前两个项目引用了“SharedLib”,其中包含一个名为C# MEF容器无法从共享部件组成零件,c#,import,export,mef,C#,Import,Export,Mef,我的解决方案中有3个项目: 1-ExporterLib(类库) 2-ImporterApp(WPF应用) 3-SharedLib(类库) 前两个项目引用了“SharedLib”,其中包含一个名为ISharedClass的接口 在“ImporterApp”中,我有一个名为ClassA的类: public class ClassA { [Import] private ISharedClass part; } 在“ExporterLib”中,我有一个名为SharedClassExport的
ISharedClass
的接口
在“ImporterApp”中,我有一个名为ClassA的类:
public class ClassA
{
[Import] private ISharedClass part;
}
在“ExporterLib”中,我有一个名为SharedClassExport的类:
[Export(ISharedClass)]
public class SharedClassExport : ISharedClass
{
//....
}
在ImporterApp中,我使用引用ExporterLib.dll文件和容器的目录目录。但是,当我尝试使用容器组合ClassA实例的各个部分时,我收到一个异常,它说:
1)未找到与约束匹配的导出:
ContractName SharedLib.ISharedClass
RequiredTypeIdentity SharedLib.ISharedClass
当我使用调试器查看目录中的部分时,我看到了正确的SharedClass导出部分,但它没有引用ISharedClass
我该怎么办
注:我想使用MEF,我不想将这些项目合并在一起
提前谢谢
总结: //在以下情况下,指定合同类型可能很重要: 要导出除基类型之外的其他类型, 例如接口
请尝试使用[Export(typeof(ISharedClass))]。如果导出的是基类型以外的类型,如interface,则必须使用typeof指定完整的合同类型。要匹配导出,请使用[Import(typeof(ISharedClass))]。请让我知道这是否有效。如果无效,请提供您正在使用的DirectoryCatalog组合逻辑 在生成后检查ImporterApp的bin文件夹。我敢打赌ExporterLib.dll不在该文件夹中。由于ExporterLib.dll不是ImporterApp的直接依赖项,因此MSBuild不会在生成时将其复制到ImporterApp的bin文件夹。要解决此问题,您有几个选择:
- 您可以在ImporterApp项目中添加对ExporterLib的引用李>
- 如果您不想添加引用,那么在ImporterApp上执行生成后步骤将ExporterLib.dll复制到ImporterApp的bin目录也可以李>
- 您还可以将每个项目设置为生成到解决方案结构中的同一目录中