コード例 #1
0
        /// <summary>
        /// Creates a catalog containing the MEF parts we want to test.
        /// </summary>
        /// <returns>A task whose result is the <see cref="ComposableCatalog"/>.</returns>
        private async Task <ComposableCatalog> CreateProductCatalogAsync()
        {
            IEnumerable <Assembly> assemblies      = this.catalogAssemblyNames.Select(Assembly.Load);
            DiscoveredParts        discoveredParts = await this.discoverer.CreatePartsAsync(assemblies).ConfigureAwait(false);

            ComposableCatalog catalog = ComposableCatalog.Create(Resolver.DefaultInstance)
                                        .AddParts(discoveredParts)
                                        .WithCompositionService();

            return(catalog);
        }
コード例 #2
0
        private async Task <ExportProvider> Compose(object parentInstance)
        {
            ExportProvider exportProvider = null;
            PartDiscovery  discovery      = PartDiscovery.Combine(
                new AttributedPartDiscovery(Resolver.DefaultInstance),
                new AttributedPartDiscoveryV1(Resolver.DefaultInstance)); // ".NET MEF" attributes (System.ComponentModel.Composition)

            Assembly parentAssembly = parentInstance.GetType().Assembly;
            string   parentLocation = parentAssembly.Location;
            string   assemblyPath   = parentLocation;

            assemblyPath = assemblyPath.Substring(0, assemblyPath.LastIndexOf('\\'));

            Helpers       desktopBridgeHelper = new Helpers();
            List <string> assemblies          = new[] { parentLocation }
            .Concat(
                Directory.EnumerateFiles(assemblyPath, "*.dll", SearchOption.TopDirectoryOnly)
                .Where(_ => _.Contains("NUnit3GUI")))
            .ToList();

            DiscoveredParts discoveredParts = await discovery.CreatePartsAsync(assemblies);

            discoveredParts.ThrowOnErrors();

            ComposableCatalog catalog = ComposableCatalog.Create(Resolver.DefaultInstance)
                                        .AddParts(discoveredParts)
                                        .WithCompositionService();

            CompositionConfiguration config = CompositionConfiguration.Create(catalog);

            config.ThrowOnErrors();

            IExportProviderFactory epf = config.CreateExportProviderFactory();

            exportProvider = epf.CreateExportProvider();

            ICompositionService service = exportProvider.GetExportedValue <ICompositionService>();

            service.SatisfyImportsOnce(parentInstance);

            return(exportProvider);
        }
コード例 #3
0
        public async Task MetadataAddedAfterDiscoveryIsAvailableAtRuntime()
        {
            var discovery = TestUtilities.V2Discovery;
            var parts     = await discovery.CreatePartsAsync(typeof(Export1), typeof(Export2));

            var emptyCatalog = ComposableCatalog.Create(discovery.Resolver);
            var catalog      = emptyCatalog.AddParts(parts);

            var modifiedParts = new DiscoveredParts(
                catalog.Parts.Select(p => new ComposablePartDefinition(
                                         p.TypeRef,
                                         p.Metadata,
                                         p.ExportedTypes.Select(ed => new ExportDefinition(ed.ContractName, ImmutableDictionary.CreateRange(ed.Metadata).Add("K", "V"))).ToImmutableList(),
                                         ImmutableDictionary.CreateRange(p.ExportingMembers.Select(kv => new KeyValuePair <MemberRef, IReadOnlyCollection <ExportDefinition> >(
                                                                                                       kv.Key,
                                                                                                       kv.Value.Select(ed => new ExportDefinition(ed.ContractName, ImmutableDictionary.CreateRange(ed.Metadata).Add("K", "V"))).ToImmutableList()))),
                                         p.ImportingMembers,
                                         p.SharingBoundary,
                                         p.OnImportsSatisfiedRef,
                                         p.ImportingConstructorOrFactoryRef,
                                         p.ImportingConstructorImports,
                                         p.CreationPolicy,
                                         p.IsSharingBoundaryInferred)),
                catalog.DiscoveredParts.DiscoveryErrors);
            var modifiedCatalog = emptyCatalog.AddParts(modifiedParts);

            var exportProvider = CompositionConfiguration.Create(modifiedCatalog)
                                 .CreateExportProviderFactory()
                                 .CreateExportProvider();

            var export1 = exportProvider.GetExport <Export1, IDictionary <string, object> >();

            Assert.Equal("V", export1.Metadata["K"]);
            var export2 = exportProvider.GetExport <Export2, IDictionary <string, object> >();

            Assert.Equal("V", export2.Metadata["K"]);
        }