.NET Core读取appsettings.json配置

软件发布|下载排行|最新软件

当前位置:首页IT学院IT技术

.NET Core读取appsettings.json配置

dudu   2022-05-28 我要评论

这是一位朋友问我的问题,写篇随笔回答一下。有2种方法,一种叫丑陋的方法 ——IConfiguration ,一种叫优雅的方法 —— IOptions 。

1)先看丑陋的方法

比如在RedisClient 中需要读取appsettings.json 中的 redis 连接字符串:

{
  "redis": {
    "ConnectionString": "xxx"
  }
}

需要在RedisClient 的构造函数参数中添加IConfiguration 接口,并通过它直接读取:

public class RedisClient
{
    private readonly string _connectionString;

    public RedisClient(IConfiguration configuration)
    {
        _connectionString = configuration.GetSection("redis")["ConnectionString"];
    }
}

然后在 Startup 的ConfigureServices() 方法中进行注入:

public IConfigurationRoot Configuration { get; }

public void ConfigureServices(IServiceCollection services)
{
    services.AddSingleton<IConfiguration>(Configuration);     
}

2)接着看优雅的方法

首先定义一个存放连接字符串的配置类 RedisOptions :

public class RedisOptions
{
    public string ConnectionString { get; set; }
}

然后给RedisClient 的构造函数参数中添加IOptions<RedisOptions> 接口,通过IOptions<RedisOptions> 读取配置,RedisClient 无需关心 appsettings.json :

public class RedisClient
{
    private readonly RedisOptions _redisOptions;

    public RedisClient(IOptions<RedisOptions> redisOptions)
    {
        _redisOptions = redisOptions.Value;
    }
}

而 appsettings.json 中的配置可以在 Startup 的ConfigureServices() 中注入进去:

services.AddOptions();
services.Configure<RedisOptions>(Configuration.GetSection("redis"));

(注:使用上面的 Configure 方法需要安装 nuget 包Microsoft.Extensions.Options.ConfigurationExtensions )

作为类库的设计者,你可以更贴心些,写个扩展方法进行上面的注入操作。

Copyright 2022 版权所有 软件发布 访问手机版

声明:所有软件和文章来自软件开发商或者作者 如有异议 请与本站联系 联系我们