using Abp.Dependency; using Newtonsoft.Json; using Newtonsoft.Json.Linq; using System; using System.IO; namespace Yunda.ISAS.DataMonitoringServer.DataAnalysis.Helper { public class ConfigurationHepler : ISingletonDependency { private Guid substationId; private string substationName; //private readonly IConfigurationRoot _appConfiguration; private readonly object selflocker = new object(); #if DEBUG private readonly string _path = "./appsettings.development.json"; #else private readonly string _path = "./appsettings.json"; #endif public Guid SubstationId { get => substationId; set { substationId = value; SetAppsettingsValue(value.ToString(), "ServiceConfig", "SubstationId"); } } public string SubstationName { get => substationName; set { substationName = value; SetAppsettingsValue(value.ToString(), "ServiceConfig", "SubstationName"); } } public void InitSubstationId() { try { substationName = GetAppsettingsValue("ServiceConfig", "SubstationName"); var str = GetAppsettingsValue("ServiceConfig", "SubstationId"); if (!string.IsNullOrWhiteSpace(str)) { substationId = new Guid(str); } } catch (Exception ex) { throw ex; } } public ConfigurationHepler() { } public void SetAppsettingsValue(string value, params string[] keys) { if (keys.Length > 4) { throw new ArgumentOutOfRangeException(nameof(keys), "json嵌套最多为4层"); } if (File.Exists(_path)) { string text = ""; lock (selflocker) { using (StreamReader reader = File.OpenText(_path)) { JObject obj = (JObject)JToken.ReadFrom(new JsonTextReader(reader)); switch (keys.Length) { case 1: obj[keys[0]] = value; break; case 2: obj[keys[0]][keys[1]] = value; break; case 3: obj[keys[0]][keys[1]][keys[2]] = value; break; case 4: obj[keys[0]][keys[1]][keys[2]][keys[3]] = value; break; } text = obj.ToString(); } } lock (selflocker) { using (StreamWriter streamWriter = new StreamWriter(_path)) { streamWriter.WriteLine(text); } } } } public string GetAppsettingsValue(params string[] keys) { if (keys.Length > 4) { throw new ArgumentOutOfRangeException(nameof(keys), "json嵌套最多为4层"); } if (File.Exists(_path)) { lock (selflocker) { using (StreamReader reader = File.OpenText(_path)) { JObject obj = (JObject)JToken.ReadFrom(new JsonTextReader(reader)); string value = ""; switch (keys.Length) { case 1: value = obj[keys[0]].ToString(); break; case 2: value = obj[keys[0]][keys[1]].ToString(); break; case 3: value = obj[keys[0]][keys[1]][keys[2]].ToString(); break; case 4: value = obj[keys[0]][keys[1]][keys[2]][keys[3]].ToString(); break; } return value; } } } return ""; } } }