using System.Collections.Generic; using System.Linq; namespace AyaNova.DataList { internal static class DataListFactory { // internal static IAyaDataList GetAyaDataList(string ListKey) // { // switch (ListKey) // { // case nameof(TestWidgetUserEmailDataList): // return new TestWidgetUserEmailDataList(); // case nameof(WidgetDataList): // return new WidgetDataList(); // default: // throw new System.ArgumentOutOfRangeException($"DataListFactory: Unknown list \"{ListKey}\""); // } // } // internal static List DataListList = null; // private static void PopulateDataListList(){ // DataListList= new List(); // foreach (System.Reflection.TypeInfo ti in ass.DefinedTypes) // { // if (ti.ImplementedInterfaces.Contains(typeof(IAyaDataList))) // { // DataListList.Add(ti.Name); // } // } // } //This may be fast enough to not cache but let's see internal static IAyaDataList GetAyaDataList(string ListKey) { System.Reflection.Assembly ass = System.Reflection.Assembly.GetEntryAssembly(); foreach (System.Reflection.TypeInfo ti in ass.DefinedTypes) { // if (!ti.IsAbstract && ti.ImplementedInterfaces.Contains(typeof(IAyaDataList))) if(ti.Name==ListKey) { return ass.CreateInstance(ti.FullName) as IAyaDataList; } } throw new System.ArgumentOutOfRangeException($"DEV ERROR in DataListFactory.cs: ListKey {ListKey} specified doesn't exist"); } internal static List GetListOfAllDataListKeyNames() { //https://stackoverflow.com/a/42574373/8939 List ret = new List(); System.Reflection.Assembly ass = System.Reflection.Assembly.GetEntryAssembly(); foreach (System.Reflection.TypeInfo ti in ass.DefinedTypes) { if (ti.ImplementedInterfaces.Contains(typeof(IAyaDataList))) { ret.Add(ti.Name); } } return ret; } }//eoc }//eons