示例#1
0
        internal static IContainer CreateContainerV1(params Type[] parts)
        {
            Requires.NotNull(parts, nameof(parts));
            var catalog = new MefV1.Hosting.TypeCatalog(parts);

            return(CreateContainerV1(catalog));
        }
示例#2
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>());
        }