我一直无法为我的问题找到答案。我正在使用 MEF 来查找和创建实现 IPlugIn 的类,但我最终得到了每个 PlugIn 类的两个版本。我已确定 AggregateCatalog 仅包含一个程序集,该程序集仅包含每个类的一种类型作为部件,但我仍然得到每个类的两个实例作为最终结果。我可能只是在做一些愚蠢的事情,但我还没有找到它。我将不胜感激任何帮助...
... [ImportMany(typeof(IPlugIn))] 公共 System.Lazy>[] 插件 { 获取;放; } ... //aggregatecatalog 只包含一个包含插件类的 dll,其中 4 个 容器 = 新组合容器(聚合目录, CompositionOptions.DisableSilentRejection | CompositionOptions.IsThreadSafe);\ container.SatisfyImportsOnce(this); ... 公共无效开始所有() { //我们这里有8个插件??如何? if (Plugins == null || Plugins.Count() == 0) { log.Warn("没有可启动的插件!"); 返回; } foreach(插件中的 var 插件) { log.Info("启动插件:" + plug.Value.GetName()); plug.Value.Start(); } } ... [导出(类型(IPlugIn))] 公共类 MyPlugIn : BasePlugIn, IPlugIn ...
我在 Visual Studio 中调试。我清楚地看到只有一个程序集加载。CompositionContainer 每个只有 1 个。在 StartAll() 中的 SatisfyImportOnce 之后,我有每个 IPlugIn 类的两个实例。这与我使用 ImportMany 的方式有关吗?我对任何想法持开放态度。