using System; using System.Reflection; using System.Linq; namespace Aurora.Backend.Executors { public abstract class BaseExecutor { public BaseExecutor() { } public static BaseExecutor CreateExecutor(ExecutorType executorType) where T : BaseExecutor { MethodInfo method = typeof(T).GetMethod("Create"); if (method == null) { throw new InvalidOperationException("Executor must include a 'create' method."); } return method.Invoke(null, new object[] { executorType }) as BaseExecutor; // var types = typeof(T).Assembly.GetTypes(); // foreach (Type type in types) // { // MethodInfo genericMethod = method.MakeGenericMethod(type); // genericMethod.Invoke(null, null); // No target, no arguments // } } } public enum ExecutorType { Server, Client } }