我一直无法为我的问题找到答案。我正在使用 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 的方式有关吗?我对任何想法持开放态度。