Asp.Net core 我怎样才能替换Configuration Manager
Asp.Net core how can I replace the Configuration Manager
我是 ASP.NET Core RC2 的新手,我想知道如何获得一些配置设置并将其应用到我的方法中。例如在我的appsettings.json
我有这个特定的设置
"ConnectionStrings": {
"DefaultConnection":
"Server=localhost;User Id=postgres;port=5432;Password=castro666;Database=dbname;"
}
在我的控制器中,每次我想查询数据库时,我都必须使用这个设置
using (var conn =
new NpgsqlConnection(
"Server=localhost;User Id=postgres;port=5432;Password=castro666;Database=dbname;"))
{
conn.Open();
}
这里明显的缺陷是,如果我想向配置添加更多内容,我必须更改该方法的每个实例。我的问题是如何在 appsettings.json
中获取 DefaultConnection
以便我可以做这样的事情
using (var conn =
new NpgsqlConnection(
ConfigurationManager["DefaultConnection"))
{
conn.Open();
}
在 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",我们将强类型 classes 绑定到配置段。现在,在 ConfigureServices
中执行此操作:
public void ConfigureServices(IServiceCollection services)
{
// Setup options with DI
services.AddOptions();
// Configure ConnectionStrings using config
services.Configure<ConnectionStrings>(Configuration);
}
现在一切就绪,我们可以简单地要求 class 的构造函数承担 IOptions<ConnectionStrings>
我们将获得 [=41= 的物化实例] 包含配置值。
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 是我一直建议 必须阅读的官方文档。
ConfigurationManager.AppSettings
在引用 NuGet 包后在 .NET Core 2.0 中可用
System.Configuration.ConfigurationManager
我是 ASP.NET Core RC2 的新手,我想知道如何获得一些配置设置并将其应用到我的方法中。例如在我的appsettings.json
我有这个特定的设置
"ConnectionStrings": {
"DefaultConnection":
"Server=localhost;User Id=postgres;port=5432;Password=castro666;Database=dbname;"
}
在我的控制器中,每次我想查询数据库时,我都必须使用这个设置
using (var conn =
new NpgsqlConnection(
"Server=localhost;User Id=postgres;port=5432;Password=castro666;Database=dbname;"))
{
conn.Open();
}
这里明显的缺陷是,如果我想向配置添加更多内容,我必须更改该方法的每个实例。我的问题是如何在 appsettings.json
中获取 DefaultConnection
以便我可以做这样的事情
using (var conn =
new NpgsqlConnection(
ConfigurationManager["DefaultConnection"))
{
conn.Open();
}
在 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",我们将强类型 classes 绑定到配置段。现在,在 ConfigureServices
中执行此操作:
public void ConfigureServices(IServiceCollection services)
{
// Setup options with DI
services.AddOptions();
// Configure ConnectionStrings using config
services.Configure<ConnectionStrings>(Configuration);
}
现在一切就绪,我们可以简单地要求 class 的构造函数承担 IOptions<ConnectionStrings>
我们将获得 [=41= 的物化实例] 包含配置值。
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 是我一直建议 必须阅读的官方文档。
ConfigurationManager.AppSettings
在引用 NuGet 包后在 .NET Core 2.0 中可用 System.Configuration.ConfigurationManager