/// <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); }
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); }
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"]); }