我的解决方案中有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!
我该怎么办?
附言:我想使用MEF,并且我不想将任何这些项目合并在一起。
提前致谢。
摘要:
//指定合同类型可能很重要
您要导出基本类型以外的其他类型,
例如界面。
https://msdn.microsoft.com/en-us/library/system.componentmodel.composition.importattribute(v=vs.110).aspx
最佳答案
请尝试使用[Export(typeof(ISharedClass))]。如果要导出基本类型以外的其他类型(例如接口),则使用typeof指定完整合同类型非常重要。要匹配导出,请使用[Import(typeof(ISharedClass))]。请让我知道这是否可行,请提供您正在使用的DirectoryCatalog组成逻辑?