public static void Load(this RobotCaseDispatcherComponent self)
        {
            self.Dictionary.Clear();

            HashSet <Type> types = Game.EventSystem.GetTypes(typeof(RobotCaseAttribute));

            foreach (Type type in types)
            {
                object[] attrs = type.GetCustomAttributes(typeof(RobotCaseAttribute), false);
                if (attrs.Length == 0)
                {
                    continue;
                }

                RobotCaseAttribute attr = attrs[0] as RobotCaseAttribute;
                if (attr == null)
                {
                    continue;
                }

                IRobotCase robotCase = Activator.CreateInstance(type) as IRobotCase;
                if (robotCase == null)
                {
                    Log.Error($"RobotCase handle {type.Name} 需要继承 IRobotCase");
                    continue;
                }

                self.Dictionary.Add(attr.CaseType, robotCase);
            }
        }
        public static async ETTask Run(this RobotCaseDispatcherComponent self, int caseType, string line)
        {
            if (!self.Dictionary.TryGetValue(caseType, out IRobotCase iRobotCase))
            {
                return;
            }

            try
            {
                using (RobotCase robotCase = await RobotCaseComponent.Instance.New())
                {
                    robotCase.CommandLine = line;
                    await iRobotCase.Run(robotCase);
                }
            }
            catch (Exception e)
            {
                Log.Error($"{self.DomainZone()} {e}");
                RobotLog.Console($"RobotCase Error {caseType}:\n\t{e}");
            }
        }