public object Index() { var allControllerTypes = from type in GetType().Assembly.GetTypes() where type.BaseType.FullName.Contains("ApiController") select type; var allPublicMethods = allControllerTypes.SelectMany(x => x.GetMethods(BindingFlags.Public | BindingFlags.Instance)) .Where(x => x.CustomAttributes.Any(attr => attr.AttributeType == typeof(HttpGetAttribute))) .Where(x => x.DeclaringType != null && x.DeclaringType.Name.Contains(x.Name) == false) .Where(x => x.DeclaringType != null && !x.DeclaringType.Name.Contains("DemoStudio")) .Where(x => x.DeclaringType != null && !(x.DeclaringType.Name.Contains("Menu") && !x.Name.Contains("CreateIndexes") && !x.Name.Contains("CreateLastFmDataset") && !x.Name.Contains("DeployNorthwind") && !x.Name.Contains("CreateImdbDataset"))) .Select(x => new DemoInformation { ControllerName = x.DeclaringType.Name.Replace("Controller", string.Empty), DemoName = x.Name, DemoDisplayName = DemoUtilities.ExtractDemoDisplayName(x), DemoParameters = DemoUtilities.ExtractDemoParameters(x), DemoOrder = DemoUtilities.ExtractDemoOrder(x), DemoOutputType = DemoUtilities.ExtractDemoOutputType(x).ToString() }); var result = allPublicMethods .OrderBy(x => x.ControllerName, new ControllerNameComparer()) .ThenBy(x => x.DemoOrder) .ThenBy(x => x.DemoDisplayName) .ToList(); var resObj = new MenuResults { Demos = result }; return(resObj); }
public object Index() { var allControllerTypes = from type in GetType().Assembly.GetTypes() where type.BaseType.FullName.Contains("ApiController") select type; var allPublicMethods = allControllerTypes.SelectMany(x => x.GetMethods(BindingFlags.Public | BindingFlags.Instance)) .Where(x => x.CustomAttributes.Any(attr => attr.AttributeType == typeof(HttpGetAttribute))) .Where(x => x.DeclaringType != null && x.DeclaringType.Name.Contains(x.Name) == false) .Where(x => x.DeclaringType != null && !x.DeclaringType.Name.Contains("DemoStudio")) .Where(x => x.DeclaringType != null && !(x.DeclaringType.Name.Contains("Menu") && !x.Name.Contains("CreateIndexes") && !x.Name.Contains("CreateLastFmDataset"))) .Select(x => string.Format("{0}/{1}", x.DeclaringType.Name, x.Name)); // in VS2015 : $"{x.DeclaringType.Name}/{x.Name}" var result = allPublicMethods.ToList(); result.Sort( delegate(string s1, string s2) { if (s1.Contains("Basic") && s2.Contains("Advanced")) return -1; if (s2.Contains("Basic") && s1.Contains("Advanced")) return 1; return string.Compare(s1, s2, StringComparison.Ordinal); } ); FormattedMenuIndex.FormatControllerString(result); var container = new CompositionContainer(new AssemblyCatalog(Assembly.GetExecutingAssembly())); var indexesList = container.GetExportedValues<AbstractIndexCreationTask>().ToList(); var multimapList = container.GetExportedValues<AbstractMultiMapIndexCreationTask>().ToList(); var transformersList = container.GetExportedValues<AbstractTransformerCreationTask>().ToList(); var allLists = new List<string>(); allLists.AddRange(indexesList.Select(x => x.IndexName)); allLists.AddRange(multimapList.Select(x => x.IndexName)); allLists.AddRange(transformersList.Select(x => x.TransformerName)); var resObj = new MenuResults() { ListOfControllers = result, ListOfIndexes = allLists }; return (resObj); }