我是 ASP.NET Core RC2 的新手,我想知道如何获得一些配置设置并将其应用到我的方法中。对于我appsettings.json
中的实例,我有此特定设置
"ConnectionStrings": {
"DefaultConnection":
"Server=localhost;User Id=postgres;port=5432;Password=castro666;Database=dbname;"
}
在我的Controller中,每次想要查询数据库时,我都必须使用此设置
using (var conn =
new NpgsqlConnection(
"Server=localhost;User Id=postgres;port=5432;Password=castro666;Database=dbname;"))
{
conn.Open();
}
这里显而易见的是,如果我想在配置中添加更多内容,我必须更改该方法的每个实例。我的问题是如何在DefaultConnection
中获取appsettings.json
以便我可以执行此类操作
using (var conn =
new NpgsqlConnection(
ConfigurationManager["DefaultConnection"))
{
conn.Open();
}
答案 0 :(得分:12)
在 ASP.NET Core 中,您可以使用许多选项来访问配置。看起来如果您有兴趣访问DefaultConnection
,您最好使用 DI 方法。为了确保您可以使用构造函数依赖注入,我们必须在Startup.cs
中正确配置一些内容。
public IConfigurationRoot Configuration { get; }
public Startup(IHostingEnvironment env)
{
var builder = new ConfigurationBuilder()
.SetBasePath(env.ContentRootPath)
.AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
.AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true)
.AddEnvironmentVariables();
Configuration = builder.Build();
}
我们现在已从构建器中读取配置JSON
并将其分配给我们的Configuration
实例。现在,我们需要为依赖注入配置它 - 所以让我们首先创建一个简单的 POCO 来保存连接字符串。
public class ConnectionStrings
{
public string DefaultConnection { get; set; }
}
我们正在实现"Options Pattern",我们将强类型类绑定到配置段。现在,在ConfigureServices
执行此操作:
public void ConfigureServices(IServiceCollection services)
{
// Setup options with DI
services.AddOptions();
// Configure ConnectionStrings using config
services.Configure<ConnectionStrings>(Configuration);
}
现在这一切都已到位,我们可以简单地要求类的构造函数接受IOptions<ConnectionStrings>
,并且我们将获得包含配置值的类的实现实例。
public class MyController : Controller
{
private readonly ConnectionStrings _connectionStrings;
public MyController(IOptions<ConnectionString> options)
{
_connectionStrings = options.Value;
}
public IActionResult Get()
{
// Use the _connectionStrings instance now...
using (var conn = new NpgsqlConnection(_connectionStrings.DefaultConnection))
{
conn.Open();
// Omitted for brevity...
}
}
}
Here是官方文档,我总是建议必须阅读。
答案 1 :(得分:2)
ConfigurationManager.AppSettings
在引用NuGet程序包后在.NET Core 2.0中可用
System.Configuration.ConfigurationManager