由于.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>'
我错过了什么?
答案 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
非常重要。