我无法解决一个看起来很基本的MEF问题:我有两个“插件”项目(我们称之为P1和P2),以及一个对两个插件都通用的第三个项目(我们称之为C)。P1和P2都引用C。当尝试导入位于P1中的组件时,它会失败,因为此组件依赖于位于C中的组件。以下是跟踪信息:
System.ComponentModel.Composition Warning: 1: 可组合部分定义'MyCompany.Client.Pms.Plugin.InclusionList.ViewModel.InclusionListViewModel'已被拒绝。组成保持不变。更改被拒绝,因为出现了以下错误:组成产生多个组成错误,其中有4个根本原因。下面提供了根本原因。有关更详细的信息,请查看CompositionException.Errors属性。
1) 没有找到与约束匹配的导出项'((exportDefinition.ContractName = "MyCompany.Client.Plugins.Common.Controls.Selectors.PortfolioSelectors.ViewModel.ICalypsoBookSelectorViewModel") && (exportDefinition.Metadata.ContainsKey("ExportTypeIdentity") && "MyCompany.Client.Plugins.Common.Controls.Selectors.PortfolioSelectors.ViewModel.ICalypsoBookSelectorViewModel".Equals(exportDefinition.Metadata.get_Item("ExportTypeIdentity"))))'。
导致:无法在部分'MyCompany.Client.Pms.Plugin.InclusionList.ViewModel.InclusionListViewModel'上设置导入项'MyCompany.Client.Pms.Plugin.InclusionList.ViewModel.InclusionListViewModel.CalypsoBookSelectorViewModel(ContractName="MyCompany.Client.Plugins.Common.Controls.Selectors.PortfolioSelectors.ViewModel.ICalypsoBookSelectorViewModel")'。
元素:MyCompany.Client.Pms.Plugin.InclusionList.ViewModel.InclusionListViewModel.CalypsoBookSelectorViewModel(ContractName="MyCompany.Client.Plugins.Common.Controls.Selectors.PortfolioSelectors.ViewModel.ICalypsoBookSelectorViewModel")--> MyCompany.Client.Pms.Plugin.InclusionList.ViewModel.InclusionListViewModel --> DirectoryCatalog(Path="C:\Work\mmtrader\dashboard\Code\Src\Dashboard\MM\Trader\bin\Debug\Plugins\Positions")
[...](其他3个问题完全相同,只是针对不同的视图模型)我查看了MEF目录,结果MEF知道这些视图模型,所以我不知道缺少什么。根据Dennis的要求,以下是我的导入/导出:
导出:
Export(typeof(ICalypsoBookSelectorViewModel))]
public class CalypsoBookSelectorViewModel : ScreenWithCleanupLifecycle, ICalypsoBookSelectorViewModel
{...}
导入:
[Import(typeof(ICalypsoBookSelectorViewModel))]
public ICalypsoBookSelectorViewModel CalypsoBookSelectorViewModel { get; set; }
同时也需要考虑目录:
非常感谢您的帮助!
IDispatcher
)的信息,当构建该部分时。当然,如果该部分没有被组合,依赖的部分也不会被构建。不幸的是,我不知道如何在这里发布代码示例以重现此消息。 - Dennis