MEF を使用していくつかのプラグインをロードする WPF アプリでアセンブリのインポートの問題をデバッグしようとしており、この特定の例外を解決するためのアイデアを探しています。
制約に一致する複数のエクスポートが見つかりました:
ContractName MarkPad.Contracts.ISpellingService
RequiredTypeIdentity MarkPad.Contracts.ISpellingService
関心のあるプラグインを autofac 登録の一部として直接参照するアセンブリは 1 つだけです (最後のコード スニペット)。
[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);
})