gpt4 book ai didi

c# - MEF组成问题

转载 作者:太空狗 更新时间:2023-10-29 18:16:32 24 4
gpt4 key购买 nike

我无法解决看似基本的 MEF 问题:我有 2 个“插件”项目(我们称之为 P1 和 P2),以及两个插件共有的第三个项目(我们称之为 C)。 P1 和 P2 都引用了 C。

尝试导入 P1 中的组件时失败,因为该组件依赖于 C 中的组件。

这是痕迹:

System.ComponentModel.Composition Warning: 1 : The ComposablePartDefinition 'MyCompany.Client.Pms.Plugin.InclusionList.ViewModel.InclusionListViewModel' has been rejected. The composition remains unchanged. The changes were rejected because of the following error(s): The composition produced multiple composition errors, with 4 root causes. The root causes are provided below. Review the CompositionException.Errors property for more detailed information.

1) No exports were found that match the constraint '((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"))))'.

Resulting in: Cannot set import 'MyCompany.Client.Pms.Plugin.InclusionList.ViewModel.InclusionListViewModel.CalypsoBookSelectorViewModel (ContractName="MyCompany.Client.Plugins.Common.Controls.Selectors.PortfolioSelectors.ViewModel.ICalypsoBookSelectorViewModel")' on part 'MyCompany.Client.Pms.Plugin.InclusionList.ViewModel.InclusionListViewModel'. Element: 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 个问题完全相同,在不同的 View 模型上)

我查看了MEF目录,原来MEF知道那些 View 模型,所以我不知道缺少什么。

根据下面丹尼斯的要求,这是我的导入/导出:

导出:

Export(typeof(ICalypsoBookSelectorViewModel))]
public class CalypsoBookSelectorViewModel : ScreenWithCleanupLifecycle, ICalypsoBookSelectorViewModel
{...}

导入:

[Import(typeof(ICalypsoBookSelectorViewModel))]
public ICalypsoBookSelectorViewModel CalypsoBookSelectorViewModel { get; set; }

目录:

Catalog

预先感谢您的帮助!

最佳答案

我终于找到了问题所在,这与 MEF 指责的 CalypsoBookSelectorViewModel 无关。

事实上,ViewModel 依赖于另一个组件(CalypsoBookSelectorModel),而后者又依赖于 IDispatcher 组件。

问题是这个用契约(Contract)名称指定的 IDispatcher 组件(见下文)导出了两次(每个插件一次),因此 MEF 无法判断使用哪个.当然,真正的问题是 MEF 应该告诉我这一点,而不是将矛头指向链上两级的类。

感谢 Dennis 关注这个问题,我希望这能帮助其他遇到同样问题的人。

Dispatcher 导入:

[Import(DispatcherNames.BackgroundDispatcherName, typeof(IDispatcher))]
public IDispatcher Dispatcher { get; set; }

关于c# - MEF组成问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12402102/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com