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)); } }
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); } } }
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); } } } }