public void GetExportsForOneExportFromAlternateExportProvider(IContainer container) { var exportProvider = GetMefV1Container(container); // This is delicate work to test what we want. // We need to arrange for our own ExportProvider shim to be called prior to the MEFv1 version // that will ultimately provide the answer. The CompositionContainer respects the order of // ExportProviders as they are provided in its constructor. So we pass in our own exportProvider // first, then the real MEFv1 export provider that will have the answer to the export queries. // In order to get a catalog to be acceptable as a second parameter, we have to turn it into // an ExportProvider ourselves. var v1Catalog = new MefV1.Hosting.TypeCatalog(typeof(Apple)); var v1CatalogExportProvider = new MefV1.Hosting.CatalogExportProvider(v1Catalog); var childContainer = new MefV1.Hosting.CompositionContainer(exportProvider, v1CatalogExportProvider); v1CatalogExportProvider.SourceProvider = childContainer; var exports = childContainer.GetExports <Apple>(); Assert.Equal(1, exports.Count()); Assert.NotNull(exports.First().Value); var export = childContainer.GetExport <Apple>(); Assert.NotNull(export.Value); Assert.Throws <MefV1.ImportCardinalityMismatchException>(() => childContainer.GetExport <Tree>()); }
public void GetExportWithTMetadata(IContainer container) { var v3Container = (TestUtilities.V3ContainerWrapper)container; var v1Container = new MefV1.Hosting.CompositionContainer(v3Container.ExportProvider.AsExportProvider()); var tree = v1Container.GetExport <Tree, IMetadata>(); Assert.Equal("b", tree.Metadata.A); Assert.Equal("c", tree.Metadata.B); }
public void GetExportWithMetadataDictionary(IContainer container) { var v3Container = (TestUtilities.V3ContainerWrapper)container; var v1Container = new MefV1.Hosting.CompositionContainer(v3Container.ExportProvider.AsExportProvider()); var tree = v1Container.GetExport <Tree, IDictionary <string, object> >(); Assert.Equal("b", tree.Metadata["A"]); Assert.False(tree.Metadata.ContainsKey("B")); }
public void MefContainer_respects_shared_creation_policy() { // check that MEF respects the shared policy var mefCatalog = new System.ComponentModel.Composition.Hosting.AssemblyCatalog(typeof(DerivedService).Assembly); var mefContainer = new System.ComponentModel.Composition.Hosting.CompositionContainer(mefCatalog); // via GetExport var exp1 = mefContainer.GetExport <IBaseService>().Value; var exp2 = mefContainer.GetExport <IDerivedService>().Value; Assert.AreEqual(exp1.InstanceID, exp2.InstanceID); // via SatisfyImportsOnce var use1 = new UseBaseService(); mefContainer.SatisfyImportsOnce(use1); Assert.AreEqual(exp1.InstanceID, use1.Service.InstanceID); var use2 = new UseDerivedService(); mefContainer.SatisfyImportsOnce(use2); Assert.AreEqual(exp1.InstanceID, use2.Service.InstanceID); }