83 lines
3.1 KiB
C#
83 lines
3.1 KiB
C#
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<string> DataListList = null;
|
|
|
|
// //To be called at startup
|
|
// private static void PopulateDataListCache()
|
|
// {
|
|
// System.Reflection.Assembly ass = System.Reflection.Assembly.GetEntryAssembly();
|
|
// DataListList = new List<string>();
|
|
// 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<string> GetListOfAllDataListKeyNames()
|
|
{
|
|
//https://stackoverflow.com/a/42574373/8939
|
|
|
|
List<string> ret = new List<string>();
|
|
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 |