我在我的溶液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 –