gpt4 book ai didi

c# - MEF Composition ImportMany 产生同一类的两个版本

转载 作者:行者123 更新时间:2023-11-30 22:23:55 24 4
gpt4 key购买 nike

我无法找到我的问题的答案。我正在使用 MEF 来查找和创建实现 IPlugIn 的类,但我最终得到了每个 PlugIn 类的两个版本。我已经确定 AggregateCatalog 仅包含一个程序集,该程序集仅包含每个类的一种类型作为一个部分,但我仍然得到每个类的两个实例作为最终结果。我可能只是在做一些愚蠢的事情,但我还没有找到它。我将不胜感激任何帮助...

...    [ImportMany(typeof(IPlugIn))]     public System.Lazy>[] Plugins { get; set; }...    //aggregatecatalog only contains one dll containing plugin classes, 4 of them    container = new CompositionContainer(aggregateCatalog,                                         CompositionOptions.DisableSilentRejection                                          | CompositionOptions.IsThreadSafe);\    container.SatisfyImportsOnce(this);    ...    public void StartAll()    {    //We have 8 PlugIns here?? How?     if (Plugins == null || Plugins.Count() == 0)    {       log.Warn("No PlugIns Available to Start!");       return;    }        foreach (var plug in Plugins)        {            log.Info("Starting PlugIn: " + plug.Value.GetName());            plug.Value.Start();        }    }   ...    [Export(typeof(IPlugIn))]    public class MyPlugIn : BasePlugIn, IPlugIn    ...

我正在 Visual Studio 中调试。我清楚地看到只有一个程序集正在加载。 CompositionContainer 每个只有 1 个。在 StartAll() 中的 SatisfyImportOnce 之后,我有每个 IPlugIn 类的两个实例。这与我使用 ImportMany 的方式有关吗?我愿意接受任何想法。

最佳答案

事实证明,解决方案很简单。我从 IPlugIn 界面中完全删除了 [InheritedExport] 并创建了正确数量的插件。如果我从每个 PlugIn 子类中删除 [Export... ,我根本就没有插件。正是两者的结合创造了多个实例。

关于c# - MEF Composition ImportMany 产生同一类的两个版本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13078821/

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