我在我的溶液3个项目:MEF容器不能从共享装配组成份
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,我不想将这些项目合并在一起。
在此先感谢。
摘要:
//指定合同类型可以是重要的,如果 要导出之外的类型,则基本类型, 如接口。
单独添加[导出(typeof(ISharedClass))]不起作用。但是当我将简单的[Import]属性更改为[Import(typeof(ISharedClass))]时,它被神奇地解决了。你能描述一下如果我没有明确说明我正在使用的导入类型会发生什么?谢谢你的方式。 –
我很高兴我能解决这个问题。如果您仔细查看我的回复,我确实提到您必须将导入与[导入(typeof(ISharedClass))]相匹配。这是因为你没有导出简单的类型。您的类型从ISharedClass继承,MEF需要知道正确导出类型的完整合同。 –
那么我最初的意思是说,为什么MEF只是在零件的类型与出口匹配时才能找出它本身......但是我看了这篇文章后发现“如果你指定合同名称可能很重要想要导出除接口之外的基本类型以外的类型“... https://msdn.microsoft.com/en-us/library/system.componentmodel.composition.importattribute(v=vs.110).aspx –