public static IList<DemoMetadata> GetDemos(Assembly sourceAssembly, string firstName = null) { Contract.Requires(sourceAssembly != null); var catalog = new AssemblyCatalog(sourceAssembly); var mefItems = from export in catalog.GetExports<FrameworkElement>() where export.ContractName == DemoMetadataAttribute.DemoContractName select DemoMetadata.Create(export); var xamlItems = XamlComponent.GetDemos(sourceAssembly); var items = mefItems.Concat(xamlItems).OrderBy(_ => _.Name).ToList(); if (firstName != null) { var welcome = items.Where(metadata => metadata.Name.Equals(firstName)).FirstOrDefault(); if (welcome != null) { items.Remove(welcome); items.Insert(0, welcome); } } return items.ToReadOnlyCollection(); }
public void GetExports() { var catalog = new AssemblyCatalog(typeof(AssemblyCatalogTests).Assembly); Expression<Func<ExportDefinition, bool>> constraint = (ExportDefinition exportDefinition) => exportDefinition.ContractName == AttributedModelServices.GetContractName(typeof(MyExport)); IEnumerable<Tuple<ComposablePartDefinition, ExportDefinition>> matchingExports = catalog.GetExports(constraint); Assert.IsNotNull(matchingExports); Assert.IsTrue(matchingExports.Count() >= 0); IEnumerable<Tuple<ComposablePartDefinition, ExportDefinition>> expectedMatchingExports = catalog.Parts .SelectMany(part => part.ExportDefinitions, (part, export) => new Tuple<ComposablePartDefinition, ExportDefinition>(part, export)) .Where(partAndExport => partAndExport.Item2.ContractName == AttributedModelServices.GetContractName(typeof(MyExport))); Assert.IsTrue(matchingExports.SequenceEqual(expectedMatchingExports)); }