예제 #1
0
        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>());
        }
예제 #2
0
        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);
        }
예제 #3
0
        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);
        }