NET Core类库项目中如何读取appsettings json中的配置

               

这是一位朋友问我的问题,写篇随笔回答一下。有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 )

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


原文地址:http://www.cnblogs.com/dudu/p/6828045.html


.NET社区新闻,深度好文,微信中搜索dotNET跨平台或扫描二维码关注

640?wx_fmt=jpeg

           

再分享一下我老师大神的人工智能教程吧。零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!https://blog.csdn.net/jiangjunshow

猜你喜欢

转载自blog.csdn.net/qq_43678418/article/details/86170288