.net6使用最小api(7)— 自定义加载json配置文件

前言

最常用的加载json配置文件,采用微软自带的方法AddJsonFile,这时可通过Configuration来读取配置信息,有时为了了解原理,我们自己写重写一个加载配置的方法,下面我们来实战一下。

往期最小api文章回顾

.net6使用最小api(1)——依赖注入Autofac之构造函数注入

.net6使用最小api(2)——依赖注入Autofac之属性注入

.net6使用最小api(3)— 自定义模型验证1

.net6使用最小api(4)— 自定义模型验证2

.net6使用最小api(5)— 自定义模型验证3-FluentValidation

.net6使用最小api(6)— 集成swagger扩展类方便直接拿用

项目实战

1、重写配置文件类

添加配置文件名为AppConfigurationExtensions的类,扩展方法如下:

public static class AppConfigurationExtensions
{
    public static IConfigurationBuilder AddAppSettingsFile(this IConfigurationBuilder builder, string path)
    {
        return AddAppSettingsFile(builder, provider: null, path: path, basePath: null, optional: false, reloadOnChange: false);
    }


    public static IConfigurationBuilder AddAppSettingsFile(this IConfigurationBuilder builder, string path, bool optional)
    {
        return AddAppSettingsFile(builder, provider: null, path: path, basePath: null, optional: optional, reloadOnChange: false);
    }


    public static IConfigurationBuilder AddAppSettingsFile(this IConfigurationBuilder builder, string path, bool optional, bool reloadOnChange)
    {
        return AddAppSettingsFile(builder, provider: null, path: path, basePath: null, optional: optional, reloadOnChange: reloadOnChange);
    }


    public static IConfigurationBuilder AddAppSettingsFile(this IConfigurationBuilder builder, string path, string basePath, bool optional, bool reloadOnChange)
    {
        return AddAppSettingsFile(builder, provider: null, path: path, basePath: basePath, optional: optional, reloadOnChange: reloadOnChange);
    }


    public static IConfigurationBuilder AddAppSettingsFile(this IConfigurationBuilder builder, IFileProvider provider, string path, string basePath, bool optional, bool reloadOnChange)
    {
        var source = new JsonConfigurationSource()
        {
            FileProvider = provider,
            Path = path,
            Optional = optional,
            ReloadOnChange = reloadOnChange
        };
        builder.Add(source);
        if (!string.IsNullOrEmpty(basePath))
            builder.SetBasePath(basePath);
        AppConfig.Configuration = builder.Build();
      
        return builder;
    }
}

2、最小api,Program添加配置:

var builder = WebApplication.CreateBuilder(args);


builder.Host
.ConfigureAppConfiguration((hostingContext, config) =>
{
    config.Sources.Clear();
    config.AddJsonFile($"Configs/redis.json", optional: false, reloadOnChange: true);
    config.AddJsonFile($"Configs/domain.json", optional: false, reloadOnChange: true);
    config.AddAppSettingsFile($"appsettings.json", optional: true, reloadOnChange: true);
});


//局部调用方法
var memberUrl = builder.Configuration["MemberUrl"];

3、调用方法

//局部调用方法
var memberUrl = builder.Configuration["MemberUrl"];
//全局调用方法
var url = DMS.Common.AppConfig.GetValue("ProductUrl");
var de = DMS.Common.AppConfig.GetValue(new string[] { "Logging", "LogLevel", "Default" });

5、总结

自定义配置文件扩展方法,并结合最小api调用配置文件,个人感觉方便也实用。

dce28d7afbb93360dfc3fa4ba6459c9c.png


版权声明:本文为hailang2ll原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。