public override void Setup() { SetupTrace(); PromptInterfaces(); var typeList = ScriptTypes; if (typeList.Length > 0 && typeList.All(t => t.IsSubclassOf(typeof(BaseScript)) && t != typeof(BatchScript) && !t.IsSubclassOf(typeof(BatchScript)))) { var allClasses = Assembly.GetExecutingAssembly().GetTypes().Where(a => a.IsClass && a.Namespace != null && a.Namespace.Contains(@"Scripts")).ToList(); Scripts = new BaseScript[ScriptTypes.Length]; foreach (var t in allClasses) { if (ScriptTypes.Contains(t) && t.IsSubclassOf(typeof(BaseScript)) && !t.IsSubclassOf(typeof(BatchScript))) { Scripts[ScriptTypes.ToList().IndexOf(t)] = (BaseScript)Activator.CreateInstance(t); } } } else { throw new ArgumentNullException("No valid types specified"); } }