136 lines
4.3 KiB
C#
Raw Normal View History

2024-08-21 16:50:14 +08:00
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 "";
}
}
}