封装Appsetting单例类获取配置

1.导入包8.0.0版本

<PackageReference Include="Microsoft.Extensions.Configuration.Binder" Version="8.0.0" />
<PackageReference Include="Microsoft.Extensions.Configuration.Json" Version="8.0.0" />

2.配置对应的appsetting文件

{
  "Logging": {
    "LogLevel": {
      "Default": "Information",
      "Microsoft.AspNetCore": "Warning"
    }
  },
  "AllowedHosts": "*",
  "Redis": {
    "Enable": false,
    "ConnectionString": "127.0.0.1:6379",
    "InstanceName":  "" // 前缀
  }
}

3.配置AppSettings单例类获取配置

/// <summary>
/// appsettings.json类
/// </summary>
public class AppSettings
{
    public static IConfiguration Configuration { get; set; }

    public string contentPath { get; set; }

    
    public AppSettings(string contentPath)
    {
        string Path = "appsetting.json";

        // 如果你把配置文件 根据环境变量来分开了,可以这样写

        Configuration = new ConfigurationBuilder()
            .SetBasePath(contentPath)
            .Add(new JsonConfigurationSource
            {
                Path = Path,
                Optional = false,
                ReloadOnChange = true
            }) // 这样的话可以字节读目录里的json文件,而不是bin文件夹下的,所以不用修改复制属性
            .Build();

    }


    public AppSettings(IConfiguration configuration)
    {
        Configuration = configuration;
    }

    /// <summary>
    /// 封装要操作的字符
    /// </summary>
    /// <param name="section">节点配置</param>
    /// <returns></returns>
    public static string app(params string[] section)
    {
        try
        {
            if (section.Any())
            {
                return Configuration[string.Join(":", section)];
            }
        }
        catch (Exception)
        {

            throw;
        }

        return "";
    }

    /// <summary>
    /// 递归获取配置信息数组
    /// </summary>
    /// <typeparam name="T"></typeparam>
    /// <param name="section"></param>
    /// <returns></returns>
    public static List<T> app<T>(params string[] section)
    {
        List<T> list = new List<T>();

        // 引用Microsoft.Extensions.Configuration.Binder包
        Configuration.Bind(string.Join(":", section), list);

        return list;
    }

    /// <summary>
    /// 根据路径 configuration["App.Name"]
    /// </summary>
    /// <param name="sectionsPath"></param>
    /// <returns></returns>
    public static string GetValue(string sectionsPath)
    {
        try
        {
            return Configuration[sectionsPath];
        }
        catch (Exception)
        {

        }

        return "";
    }
}

4.在Program类中配置AppSetting单例类

// 配置AppSettings文件获取appsettings信息
builder.Services.AddSingleton(new AppSettings(builder.Configuration));

5.在control层使用
image

var redisEnable = AppSettings.app(new string[] {"Redis", "Enable"});
var redisEnable2 = AppSettings.app("Redis", "Enable");
var redisConnectionString = AppSettings.GetValue("Redis:ConnectionString");
Console.WriteLine($"Enable:{redisEnable2}, ConnectionString:{redisConnectionString}");
posted @ 2025-08-13 20:07  一切为了尚媛小姐  阅读(25)  评论(0)    收藏  举报