ASP.NET Core 是一个开源的,跨平台的,精简的模块化框架,可用于构建高性能,可扩展的web应用程序, ASP.NET Core 中的数据配置常用 k-v
的形式存储,值得注意的是,新的数据配置还支持 层级方式
,在这篇文章中,我们将会讨论如何在 ASP.NET Core 中去使用。
默认创建好的 ASP.Net Core 应用程序中会有两个json配置文件:appsettings.json
和 appsettings.Development.json
, 如下图所示:
使用 Json Provider
现在你可以使用 appsettings.json
来存放应用程序的配置数据。比如:数据库连接串,应用程序特定配置,下面的代码片段展示了如何使用 IConfigurationBuilder.AddJsonFile()
将 appsettings.json 添加到配置系统中。
public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.ConfigureAppConfiguration((hostingContext, config) =>
{
var env = hostingContext.HostingEnvironment;
config.SetBasePath(env.ContentRootPath);
config.AddJsonFile("appsettings.json", optional: false, reloadOnChange: true);
})
.UseStartup<Startup>();
接下来看一下 appsettings.json
文件的具体内容。
{
"Logging": {
"LogLevel": {
"Default": "Warning"
}
},
"AllowedHosts": "*",
"CustomKeys": {
"KeyA": "ValueA",
"KeyB": "ValueB"
}
}
要想从 appsettings.json
中读取到配置key,可以从 IConfiguration 实例中进行读取,比如说:想要从 Controller 中读取 Configuration,只需要通过依赖注入的方式将 Configuration 注入到 Controller 即可,如下代码所示:
public class HomeController : Controller
{
private readonly ILogger<HomeController> _logger;
IConfiguration _configuration;
public HomeController(ILogger<HomeController> logger, IConfiguration configuration)
{
_logger = logger;
_configuration = configuration;
}
}
下面的代码片段展示了如何通过 IConfiguration 实例 从 appsettings.json
文件中读取自定义的 CustomerKeys 节。
public IActionResult Index()
{
var keyA = _configuration["CustomKeys:KeyA"];
var keyB = _configuration["CustomKeys:KeyB"];
return View();
}
下面是 HomeController 类的完整代码。
public class HomeController : Controller
{
private readonly ILogger<HomeController> _logger;
IConfiguration _configuration;
public HomeController(ILogger<HomeController> logger, IConfiguration configuration)
{
_logger = logger;
_configuration = configuration;
}
public IActionResult Index()
{
var keyA = _configuration["CustomKeys:KeyA"];
var keyB = _configuration["CustomKeys:KeyB"];
return View();
}
}
除了默认生成的 appsettings.json
,你还可以使用自定义的json文件给应用程序提供特定的配置信息,换句话说,可以不用将所有的配置信息都放置在 appsettings.json
中,比如你可以创建一个自定义的 customsettings.json
,然后在 CreateWebHostBuilder() 中将其灌入到配置系统中,如下代码所示:
public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.ConfigureAppConfiguration((hostingContext, config) =>
{
var env = hostingContext.HostingEnvironment;
string pathOfCommonSettingsFile = env.ContentRootPath;
config.SetBasePath(env.ContentRootPath);
config.AddJsonFile("appsettings.json", optional: false, reloadOnChange: true);
config.AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true, reloadOnChange: true);
config.AddJsonFile(Path.Combine(pathOfCommonSettingsFile, "customsettings.json"), optional: true);
})
.UseStartup<Startup>();
使用 Memory Provider
所谓的 Memory Provider 允许我们将应用程序的一些配置直接配置到内存,而不像传统方式那样一定要指定一个 物理文件
, 下面的代码展示了如何使用 Memory Provider 将 key-value
存放在内存中。
var builder = new ConfigurationBuilder();
var profileCollection = new Dictionary<string, string>
{
{"AuthorProfile:FirstName", "Joydip"},
{"AuthorProfile:LastName", "Kanjilal"},
{"AuthorProfile:Address", "Hyderabad, India"}
};
builder.AddInMemoryCollection(profileCollection);
Configuration = builder.Build();
灌到内存之后,接下来就可以通过 IConfiguration 实例获取了,如下代码所示:
var firstName = _configuration["Profile:FirstName"];
值得注意的是,和传统的 ASP.NET 相比, ASP.NET Core 中的配置文件数据有变更时,默认情况下应用程序是不会感知的,如果要做到感知的话,通常有两种做法。
-
重启应用程序 -
调用 IConfigurationRoot.Reload()
对了,除了上文提到了json和memory,ASP.NET Core 还支持众多的数据格式,如:JSON, XML,INI。
译文链接:https://www.infoworld.com/article/3310608/how-to-use-configuration-providers-in-aspnet-core.html
本文分享自微信公众号 - 一线码农聊技术(dotnetfly)。
如有侵权,请联系 [email protected] 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。