Exemplo n.º 1
0
        internal async Task Load()
        {
            var assembly = AppDomain.CurrentDomain.GetAssemblies();
            var types    = assembly.SelectMany(s => s.GetTypes())
                           .Where(p => p.IsClass && !p.IsAbstract && typeof(IConfig).IsAssignableFrom(p))
                           .ToList();

            for (var i = 0; i < types.Count; i++)
            {
                var type     = types[i];
                var typeName = type.Name;
                if (_configs.ContainsKey(typeName))
                {
                    await ConfigLogger.ErrorAsync($"Duplicate setting name : {typeName}");

                    continue;
                }

                var extension = (Attribute.GetCustomAttribute(type, typeof(ConfigExtension), true) as ConfigExtension)?.Type ??
                                ConfigType.JSON;
                var fullName = $"{typeName}Config.{extension.ToString().ToLower()}";
                await LoaderConfig.CreateFile(fullName, type, extension);

                var obj = extension == ConfigType.JSON
          ? JsonLoader.GetJson(fullName, type)
          : TomlLoader.GetToml(fullName, type);
                _configs.Add(typeName, new ConfigWrapper(extension, obj));
            }
        }