我无法解决看似基本的 MEF 问题:我有 2 个“插件”项目(我们将其称为 P1 和 P2),以及两个插件共有的第三个项目(我们将其称为 C) . P1 和 P2 都参考 C。
当尝试导入 P1 中的组件时,它会失败,因为该组件依赖于 C 中的组件。
这是跟踪:
System.ComponentModel.Composition 警告:1:ComposablePartDefinition '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”部分设置导入“MyCompany.Client.Pms.Plugin.InclusionList.ViewModel.InclusionListViewModel.CalypsoBookSelectorViewModel (ContractName="MyCompany.Client.Plugins.Common.Controls.Selectors.PortfolioSelectors.ViewModel.ICalypsoBookSelectorViewModel")' .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 --> DirectoryCatalog (Path="C:\Work\mmtrader\dashboard\Code\Src\Dashboard\MM\Trader\bin\Debug\Plugins\Positions")
[...](在不同的视图模型上,其他 3 个问题完全相同)
我查看了 MEF 目录,事实证明 MEF 知道这些视图模型,所以我不知道缺少什么。
根据下面丹尼斯的要求,这是我的导入/导出:
出口:
Export(typeof(ICalypsoBookSelectorViewModel))]
public class CalypsoBookSelectorViewModel : ScreenWithCleanupLifecycle, ICalypsoBookSelectorViewModel
{...}
进口:
[Import(typeof(ICalypsoBookSelectorViewModel))]
public ICalypsoBookSelectorViewModel CalypsoBookSelectorViewModel { get; set; }
和目录:
在此先感谢您的帮助!