我的解决方案中有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组成逻辑?

10-07 15:47