在我的應用程序的根我有一個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? –