使用IOption从ASP.NET Core 3.1 Web API中的配置读取connectionString

问题描述

我正在使用.net core 3.1使用IOption读取连接字符串,但是该值显示为空(以下代码中的settings.Value.ConnectionString)。有人可以帮忙吗?在启动的ConfigureServices中,config部分可以正常运行。但不在控制器中,它显示为空。

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

services.Configure<DatabaseSettings>(options => 
Configuration.GetSection("ConnectionStrings:ABCDB").Bind(options));

public class DefaultController : ControllerBase
{
  private string _connectionString;
  public DefaultController(IOptions<DatabaseSettings> settings)
  {
    _connectionString = settings.Value.ConnectionString;
  }  
}

解决方法

更改方法并从配置中提取连接字符串并修改选项。

services.Configure<DatabaseSettings>(options => {
    string connectionString = Configurations.GetConnectionsString("ABCDB");
    options.ConnectionString = connectionString;
});

原始方法没有遵循约定进行绑定,因此没有填充所需的属性。

如果遵循常规方法,则需要重构模型类

为了演示起见,请更改名称。

public class ConnectionStrings {
    public string ABCDB { get; set; }
}

使用常规方法可以通过多种方式完成,如上所述,但这是另一个示例

services.Configure<ConnectionStrings>(Configurations.GetConnectionsStrings());

这将被使用

public class DefaultController : ControllerBase {
    private string _connectionString;
    public DefaultController(IOptions<ConnectionStrings> settings) {
        _connectionString = settings.Value.ABCDB;
    }  
}