コード例 #1
0
        private void RegisterCommands()
        {
            var assembly      = Assembly.GetExecutingAssembly();
            var assemblyTypes = assembly.GetTypes();

            var registerCommandsMethod = _commands.GetType().GetMethods().FirstOrDefault(p => p.Name == "RegisterCommands" && p.IsGenericMethod);

            foreach (var type in assemblyTypes)
            {
                var attributes = type.GetCustomAttributes();
                if (attributes.Any(p => p.GetType() == typeof(CommandsGroupAttribute)))
                {
                    var genericRegisterCommandMethod = registerCommandsMethod?.MakeGenericMethod(type);
                    genericRegisterCommandMethod?.Invoke(_commands, null);

                    if (genericRegisterCommandMethod == null)
                    {
                        _logger.Fatal($"Can't register {type.Name}");
                        return;
                    }

                    _logger.Info($"{type.Name} registered");
                }
            }
        }