私はPrism
v4とMEF
一緒に使用していTelerik RadDocking
ます。Prism
これらのドッキング ペインをMEF
一緒に使用するには、カスタム アダプターが必要です。次のようにエクスポートされる動作中のアダプターがあります。
[Export]
public class RadPaneGroupRegionAdapter : RegionAdapterBase<RadPaneGroup>
{
[ImportingConstructor]
public RadPaneGroupRegionAdapter(IRegionBehaviorFactory regionBehaviorFactory)
: base(regionBehaviorFactory)
{
}
...
}
ブートストラップで集約カタログを次のように構成します。
protected override void ConfigureAggregateCatalog()
{
this.AggregateCatalog.Catalogs.Add(new AssemblyCatalog(typeof(Bootstrapper).Assembly));
this.AggregateCatalog.Catalogs.Add(new DirectoryCatalog("Modules"));
this.AggregateCatalog.Catalogs.Add(new AssemblyCatalog(typeof(ViewModelLocator).Assembly));
this.AggregateCatalog.Catalogs.Add(new AssemblyCatalog(typeof(MyContractClass).Assembly));
}
Prism は複数のエクスポートについて不平を言っていますか?
問題は、このアダプターをPrism
アダプター マッピングに追加しようとすると、ImportCardinalityMismatchExceptionが発生し、 「制約に一致するエクスポートが複数見つかりました: xxx.Adapters.RadPaneGroupRegionAdapter」というメッセージが表示されることです。
protected override RegionAdapterMappings ConfigureRegionAdapterMappings()
{
RegionAdapterMappings mappings = base.ConfigureRegionAdapterMappings();
mappings.RegisterMapping(typeof(RadPaneGroup),
this.Container.GetExportedValue<Adapters.RadPaneGroupRegionAdapter>());
return mappings;
}
なぜこれが起こるのか理解できません。アダプター クラスは bootstrapper と同じアセンブリにあるため、一致するエクスポートは 1 つだけであると予想されます。
助けてください!
アップデート:
この行をコメントアウトすると、例外はスローされません。
this.AggregateCatalog.Catalogs.Add(new AssemblyCatalog(typeof(MyContractClass).Assembly));
おそらく問題は、同じコントロールMyContractClass
に依存していることですか? Telerik
その場合、このあいまいさをどのように解決しますか?