Пример #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));
            }
        }
Пример #2
0
        public static async Task CreateFile(string fileName, Type type, ConfigType configType)
        {
            var fileInfo = new FileInfo($"{Path}/{fileName}");

            await CreateDir(fileInfo.Directory);

            if (!fileInfo.Exists)
            {
                var instance = Activator.CreateInstance(type);
                if (configType == ConfigType.JSON)
                {
                    JsonLoader.SaveJson(fileName, instance, type);
                }
                else
                {
                    await TomlLoader.SaveToml(fileName, instance);
                }
            }
        }
Пример #3
0
        public void Save()
        {
            lock (_lockOnly)
            {
                for (var i = 0; i < _configs.Count; i++)
                {
                    var(key, value) = _configs.ElementAt(i);

                    var target   = value.Target;
                    var fullName = $"{key}Config.{value.Type.ToString().ToLower()}";
                    if (value.Type == ConfigType.JSON)
                    {
                        JsonLoader.SaveJson(fullName, target, target.GetType());
                    }
                    else
                    {
                        TomlLoader.SaveToml(fullName, target).ConfigureAwait(false);
                    }
                }
            }
        }