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}\""); // } // } // private static List DataListList = null; // //To be called at startup // private static void PopulateDataListCache() // { // System.Reflection.Assembly ass = System.Reflection.Assembly.GetEntryAssembly(); // DataListList = new List(); // foreach (System.Reflection.TypeInfo ti in ass.DefinedTypes) // { // if (!ti.IsAbstract && ti.ImplementedInterfaces.Contains(typeof(IAyaDataList))) // { // DataListList.Add(ti.Name); // } // } // } //Instantiate list object specified //this is safe as it's only called from our own code internally internal static IAyaDataList GetAyaDataList(string ListKey) { System.Reflection.Assembly ass = System.Reflection.Assembly.GetEntryAssembly(); return ass.CreateInstance($"AyaNova.DataList.{ListKey}") as IAyaDataList; // if (DataListList == null) // { // throw new System.NullReferenceException($"DataListFactory::GetAyaDataList({ListKey}) -> The data list cache is empty!"); // } // 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.IsAbstract && ti.ImplementedInterfaces.Contains(typeof(IAyaDataList))) { ret.Add(ti.Name); } } return ret; } }//eoc }//eons