|
|
|
|
using Microsoft.Extensions.Configuration;
|
|
|
|
|
using Microsoft.Extensions.Configuration.Json;
|
|
|
|
|
using Microsoft.Extensions.DependencyInjection;
|
|
|
|
|
using Microsoft.Extensions.Options;
|
|
|
|
|
using System;
|
|
|
|
|
using System.Collections.Generic;
|
|
|
|
|
|
|
|
|
|
namespace Admin.Core.Common
|
|
|
|
|
{
|
|
|
|
|
/// <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;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 配置文件管理器
|
|
|
|
|
/// </summary>
|
|
|
|
|
public interface IConfigurationManager
|
|
|
|
|
{
|
|
|
|
|
T GetAppConfig<T>(string key, T defaultValue = default(T));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 配置读取 根据环境变量
|
|
|
|
|
/// </summary>
|
|
|
|
|
public class ConfigurationManager : IConfigurationManager
|
|
|
|
|
{
|
|
|
|
|
private readonly IConfigurationRoot config;
|
|
|
|
|
|
|
|
|
|
public ConfigurationManager(IConfigurationRoot _config)
|
|
|
|
|
{
|
|
|
|
|
config = _config;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public T GetAppConfig<T>(string key, T defaultValue = default(T))
|
|
|
|
|
{
|
|
|
|
|
T value = default(T);
|
|
|
|
|
try
|
|
|
|
|
{
|
|
|
|
|
var env = Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT");
|
|
|
|
|
var builder = new ConfigurationBuilder().AddJsonFile("appsettings.json", true, false)
|
|
|
|
|
.AddJsonFile($"appsettings.{env}.json", true, false)
|
|
|
|
|
.AddEnvironmentVariables();
|
|
|
|
|
|
|
|
|
|
var configuration = builder.Build();
|
|
|
|
|
value = (T)Convert.ChangeType(configuration[key], typeof(T));
|
|
|
|
|
if (value == null)
|
|
|
|
|
value = defaultValue;
|
|
|
|
|
}
|
|
|
|
|
catch
|
|
|
|
|
{
|
|
|
|
|
value = defaultValue;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return value;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#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
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|