Configuration.GetSection(“ ConnectionStringName”)。Get <!-?->始终为null

时间:2018-07-19 15:20:32

标签: c# dependency-injection asp.net-core-2.0 class-library asp.net-core-mvc-2.0

在我的Asp.net Core 2.0应用程序中,我试图实现一种设计,如@Nkosi here所建议的那样,在类库项目中不对连接字符串使用IConfiguration构造函数依赖项。

在这种方法中,无法像下面的代码行那样将配置实例绑定到类型的新实例

public void ConfigureServices(IServiceCollection services) {
//...

var settings = Configuration
    .GetSection("ConnectionStrings:OdeToFood")
    .Get<ConnectionSetings>();

//...verify settings (if needed)

services.AddSingleton(settings);
}

public class ConnectionSetings
{
    public string Name { get; set; }
}

我可以看到Configuration.GetSection("ConnectionStrings:OdeToFood")返回了“ Key”,“ Path”和“ Value”属性,但是它无法进行绑定并且在设置中返回null。

我看到过类似的问题,其中ppl推荐了以下解决方案,但没有一个对我有用。

services.Configure<ConnectionsSetings>(Configuration.GetSection("ConnectionStrings:OdeToFood"));

Configuration
    .GetSection("ConnectionStrings:OdeToFood").Bind<>

以下是appsettings.json

{
"Greeting": "Hello!!!",
"ConnectionStrings": {
  "OdeToFood": "Server=(localdb)\\MSSQLLocalDB;Database=OdeToFood;Trusted_Connection=True;MultipleActiveResultSets=true"
  }
}

以下是Configuration.GetSection输出的即时窗口屏幕快照,在其中我可以看到键,路径和值

enter image description here

从下面的屏幕截图中可以看到设置变量为空

enter image description here

1 个答案:

答案 0 :(得分:2)

我不确定要使用提供的代码实现什么,但是为了获取值而不是null,您应该在appsettings.json中包含以下部分:

{
  ...

  "ConnectionStrings": {
    "OdeToFood": {
      "Name": "someConncetionString"
    } 
  },

  ...
}

然后下面的代码将返回对象:

var settings = Configuration
    .GetSection("ConnectionStrings:OdeToFood")
    .Get<ConnectionSetings>();