You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

242 lines
7.1 KiB

using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.Configuration.Json;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Options;
using System;
using System.Collections.Generic;
namespace Tiobon.Core.Common.Helper
{
/// <summary>
/// Json 配置文件通用类
/// </summary>
public static class JsonConfigUtils
{
#region 变量
/// <summary>
/// 锁
/// </summary>
private static object __Lock__ = new object();
#endregion
/// <summary>
/// 读取配置文件的信息
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="fileName">要读取json的名称</param>
/// <param name="key">要读取的json节点名称</param>
/// <returns></returns>
public static T GetAppSettings<T>(IConfiguration config, string AppSettingsFileName, string key) where T : class, new()
{
lock (__Lock__)
{
if (config == null)
{
config = new ConfigurationBuilder()
.Add(new JsonConfigurationSource
{
Path = AppSettingsFileName,
Optional = false,
ReloadOnChange = true
})
.Build();
}
var appconfig = new ServiceCollection()
.AddOptions()
.Configure<T>(config.GetSection(key))
.BuildServiceProvider()
.GetService<IOptions<T>>()
.Value;
return appconfig;
}
}
public static string GetJson(string jsonPath, string key)
{
IConfiguration config = new ConfigurationBuilder().AddJsonFile(jsonPath).Build(); //json文件地址
string s = config.GetSection(key).Value; //json某个对象
return s;
}
}
#region Nacos 配置清单
public class JsonConfigSettings
{
// 从nacos 读取到的系统配置信息
public static IConfiguration Configuration { get; set; }
/// <summary>
/// 配置文件名称常量
/// </summary>
private static string AppSettingsFileName = $"appsettings{ GetAppSettingsConfigName() }json";
/// <summary>
/// 根据环境变量定向配置文件名称
/// </summary>
/// <returns></returns>
private static string GetAppSettingsConfigName()
{
if (Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT") != null
&& Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT") != "")
{
return $".{Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT")}.";
}
else
{
return ".";
}
}
/// <summary>
/// 获取Nacos配置
/// </summary>
public static List<string> NacosServerAddresses
{
get
{
return JsonConfigUtils.GetAppSettings<NacosConfigDTO>(Configuration, AppSettingsFileName, "nacos").ServerAddresses;
}
}
/// <summary>
/// 获取Nacos配置
/// </summary>
public static int NacosDefaultTimeOut
{
get
{
return JsonConfigUtils.GetAppSettings<NacosConfigDTO>(Configuration, AppSettingsFileName, "nacos").DefaultTimeOut;
}
}
/// <summary>
/// 获取Nacos配置
/// </summary>
public static string NacosNamespace
{
get
{
return JsonConfigUtils.GetAppSettings<NacosConfigDTO>(Configuration, AppSettingsFileName, "nacos").Namespace;
}
}
/// <summary>
/// 获取Nacos配置
/// </summary>
public static string NacosServiceName
{
get
{
return JsonConfigUtils.GetAppSettings<NacosConfigDTO>(Configuration, AppSettingsFileName, "nacos").ServiceName;
}
}
/// <summary>
/// 获取Nacos配置
/// </summary>
public static int ListenInterval
{
get
{
return JsonConfigUtils.GetAppSettings<NacosConfigDTO>(Configuration, AppSettingsFileName, "nacos").ListenInterval;
}
}
/// <summary>
/// 获取Nacos配置
/// </summary>
public static string NacosIp
{
get
{
return JsonConfigUtils.GetAppSettings<NacosConfigDTO>(Configuration, AppSettingsFileName, "nacos").Ip;
}
}
/// <summary>
/// 获取Nacos配置
/// </summary>
public static int NacosPort
{
get
{
return int.Parse(JsonConfigUtils.GetAppSettings<NacosConfigDTO>(Configuration, AppSettingsFileName, "nacos").Port);
}
}
/// <summary>
/// 获取Nacos配置
/// </summary>
public static bool NacosRegisterEnabled
{
get
{
return JsonConfigUtils.GetAppSettings<NacosConfigDTO>(Configuration, AppSettingsFileName, "nacos").RegisterEnabled;
}
}
/// <summary>
/// 获取Nacos配置
/// </summary>
public static Dictionary<string, string> NacosMetadata
{
get
{
return JsonConfigUtils.GetAppSettings<NacosConfigDTO>(Configuration, AppSettingsFileName, "nacos").Metadata;
}
}
#endregion
#region Nacos配置
/// <summary>
/// Nacos配置实体
/// </summary>
public class NacosConfigDTO
{
/// <summary>
/// 服务IP地址
/// </summary>
public List<string> ServerAddresses { get; set; }
/// <summary>
/// 默认超时时间
/// </summary>
public int DefaultTimeOut { get; set; }
/// <summary>
/// 监听间隔
/// </summary>
public int ListenInterval { get; set; }
/// <summary>
/// 服务命名空间
/// </summary>
public string Namespace { get; set; }
/// <summary>
/// 服务名称
/// </summary>
public string ServiceName { get; set; }
/// <summary>
/// IP地址
/// </summary>
public string Ip { get; set; }
/// <summary>
/// 端口
/// </summary>
public string Port { get; set; }
/// <summary>
/// 服务命名空间
/// </summary>
public bool RegisterEnabled { get; set; }
/// <summary>
/// 其他配置
/// </summary>
public Dictionary<string, string> Metadata { get; set; }
}
#endregion
}
}