Files
raven/server/AyaNova/DataList/DataListFactory.cs
2020-01-21 21:35:09 +00:00

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