无法在.NET Core项目中为JSON appsettings文件设置配置

时间:2016-07-21 23:31:17

标签: asp.net asp.net-mvc asp.net-web-api

由于.NET Core中没有ConfigurationManager类,现在我必须在appsettings.json中设置config而不是web.config

根据this博文,我必须在那里设置我的配置,所以我确实喜欢这个:

{
  "Logging": {
    "IncludeScopes": false,
    "LogLevel": {
      "Default": "Debug",
      "System": "Information",
      "Microsoft": "Information"
    }
  },

  "Conexion": {
    "name" : "empresas",
    "connectionString": "Data Source=empresas;Initial Catalog=CATALMA; Integrated Security=True;",
    "providerName": "System.Data.SqlClient"
  }
}

我只是写了那个" Conexion"。

现在我在ViewModels文件夹中创建了以下类:

public class ConexionConfig 
    {
       public string name { get; set; }
        public string connectionString { get; set; }
        public string providerName { get; set; }
    }

现在,在Startup.cs中,在ConfigureServices方法中,我必须通过以下方式添加它:

public void ConfigureServices(IServiceCollection services)
        {
            // Add framework services.
            services.Configure<ConexionConfig>(Configuration.GetSection("Conexion"));
            services.AddMvc();
        }

但不幸的是,我收到以下错误:

Argument 2: cannot convert from 
     'Microsoft.Extensions.Configuration.IConfigurationSection' to
     'System.Action<ConexionConfig>'

我错过了什么?

3 个答案:

答案 0 :(得分:27)

首先,您需要将以下nuget包添加到ASP核心项目中。

Microsoft.Extensions.Options.ConfigurationExtensions

包中包含的扩展方法允许您按照原来的方式配置强类型配置。

services.Configure<ConexionConfig>(Configuration.GetSection("Conexion"));

或者,你可以直接使用活页夹,就像这个帖子中的另一个答案所暗示的那样,没有重要的前一个包,而是:

Microsoft.Extensions.Configuration.Binder

这意味着您必须在管道上显式启用选项,并绑定操作。那就是:

services.AddOptions();
services.Configure<ConexionConfig>(x => Configuration.GetSection("Conexion").Bind(x));

答案 1 :(得分:5)

尝试安装nuget包Microsoft.Extensions.Configuration.Binder并使用Bind方法:

 services.Configure<ConexionConfig>(x => Configuration.GetSection("Conexion").Bind(x));

如果要注入选项类,还必须安装选项包Microsoft.Extensions.Options并添加对它的支持:

public void ConfigureServices(IServiceCollection services)
{
    services.AddOptions();
    //..
}

现在您可以在控制器和视图中注入IOptions<ConexionConfig>

答案 2 :(得分:0)

我基于其他地方的例子。将appsettings.json更改为以下内容:

{
  "Logging": {
    "IncludeScopes": false,
    "LogLevel": {
      "Default": "Debug",
      "System": "Information",
      "Microsoft": "Information"
    }
  },
  "Data": {
    "DefaultConnection": {
      "ConnectionString": "Data Source=myserver\\sql08;Initial Catalog=enterprises;User id=userAPP;Password=mypassword;"
    }
  }
}

ConexionConfig类更改为:

 public class ConexionConfig
        {

        public string ConnectionString { get; set; }

    }
}

然后在Startup.cs

...
public void ConfigureServices(IServiceCollection services)
        {
            // Add framework services.
            services.AddMvc();
            services.Configure<ConexionConfig>(Configuration.GetSection("Data:DefaultConnection"));
        }
...

在此文件中包含using Microsoft.Extensions.Configuration非常重要。