在我的应用程序的根我有一个AggregateCatalog和CompositionContainer中,像这样:定义范围,MEF与CompositionScopeDefinition
AggregateCatalog aggregateCatalog = new AggregateCatalog();
CompositionContainer compositionContainer = new CompositionContainer(aggregateCatalog);
我的应用程序加载了包含几个出口如下面的图中的模块。我想使用CompositionScopeDefinition来限制图中圈出的导出。
See here for the class definitions.
// Create CompositionScopeDefinition.
TypeCatalog globalParts = new TypeCatalog(typeof(RequestListener));
TypeCatalog scopedParts = new TypeCatalog(typeof(RequestHandler), typeof(DataAccessLayer), typeof(Logger), typeof(DatabaseConnection));
CompositionScopeDefinition compositionScopeDefinition = new CompositionScopeDefinition(
globalParts,
new[] { new CompositionScopeDefinition(scopedParts, null) });
// Register CompositionScopeDefinition.
aggregateCatalog.Catalogs.Add(compositionScopeDefinition);
// Create an instance of RequestListener.
RequestListener requestListener = compositionContainer.GetExportedValue<RequestListener>();
然而,这会导致以下情况除外:
System.ComponentModel.Composition.ImportCardinalityMismatchException发生消息=没有出口找到匹配的是约束: ContractName MyNamespace。 RequestListener RequiredTypeIdentity MyNamespace.RequestListener的InnerException:
如何添加使用CompositionScopeDefinition我的作用域出口到现有AggregateCatalog并使用我现有的CompositionContainer中初始化呢?
更新
看来,使用AggregateCatalog问题。如果我直接将CompositionScopeDefinition添加到CompositionContainer中,但是这会阻止我将其他目录添加到CompositionContainer中。
我该如何适应Prism Bootstrapper? –