我正在尝试在使用 MEF 加载一些插件并寻找解决此特定异常的想法的 WPF 应用程序上调试程序集导入问题:
找到多个与约束匹配的导出:
ContractName MarkPad.Contracts.ISpellingService
RequiredTypeIdentity MarkPad.Contracts.ISpellingService
只有一个程序集直接引用关注的插件作为它的 autofac 注册的一部分(最后的代码片段)。
[ImportingConstructor]
public SpellCheckPlugin(
IPluginSettingsProvider settingsProvider,
ISpellingService spellingService,
ISpellCheckProviderFactory spellCheckProviderFactory)
只有 1 个实现ISpellingService
[Export(typeof(ISpellingService))]
public class SpellingService : ISpellingService
这是github 上的一个开源Code52 项目。
插件导入为:
[ImportMany]
IEnumerable<IPlugin> plugins;
到目前为止我已经尝试过:
- 这和这篇博客文章都提到了使用
[ImportMany(AllowRecomposition = true)]
,但这似乎也没有帮助。 - 我发现的其他讨论提到将“复制本地”设置为 false,但因为它实际上用于注册代码,这不是一个选项,因为它最终不会出现在输出文件夹中。
有任何想法吗?
引用插件的注册码
builder.RegisterType<SpellingService>().As<ISpellingService>()
.SingleInstance()
.OnActivating(args =>
{
var settingsService = args.Context.Resolve<ISettingsProvider>();
var settings = settingsService.GetSettings<SpellCheckPlugin.SpellCheckPluginSettings>();
args.Instance.SetLanguage(settings.Language);
})