ASP.NET Core中的Configuration配置二

2022-04-18 14:11:52
目录
1.内存配置1.1GetValue2.绑定到实体类3.绑定至对象图4.将数组绑定至类5.在Razor Pages页或MVC视图中访问配置

相关文章

ASP.NET Core2.2 中的Configuration配置一

ASP.NET Core2.2 中的Configuration配置二

1.内存配置

MemoryConfigurationProvider使用内存中集合作为配置键值对。若要激活内存中集合配置,请在ConfigurationBuilder的实例上调用AddInMemoryCollection扩展方法。可以使用IEnumerable<KeyValuePair<String,String>> 初始化配置提供程序。构建主机时调用ConfigureAppConfiguration以指定应用程序的配置:

public class Program{    public static readonly Dictionary<string, string> _dict =        new Dictionary<string, string>        {            {"MemoryCollectionKey1", "value1"},            {"MemoryCollectionKey2", "value2"}        };    public static void Main(string[] args)    {        CreateWebHostBuilder         config.AddJsonFile(                "starship.json", optional: true, reloadOnChange: true);        })        .UseStartup<Startup>();

示例应用程序调用GetSection方法获取json文件中starship键。通过Bind方法把starship键属性值绑定到Starship类的实例中:

var starship = new Starship();Configuration.GetSection("starship").Bind(starship);var _starship = starship;

当应用程序启动时会提供JSON文件配置内容:

ASP.NETCore中的Configuration配置二

3.绑定至对象图

通过第2小节我们学习到如何绑定配置文件内容映射到实例化实体类属性去,同样,配置文件内容也可以绑定到对象图去。现在我们在CoreWeb/Models目录下新增一个叫tvshow.xml文件,配置内容如下:

<?xml version="1.0" encoding="UTF-8"?><configuration>  <tvshow>    <metadata>      <series>Dr. Who</series>      <title>The Sun Makers</title>      <airdate>11/26/1977</airdate>      <episodes>4</episodes>    </metadata>    <actors>      <names>Tom Baker, Louise Jameson, John Leeson</names>    </actors>    <legal>(c)1977 BBC https://www.bbc.co.uk/programmes/b006q2x0</legal>  </tvshow></configuration>

然后再新增一个对应配置内容的实体模型(/Models/TvShow.cs),其对象图包含Metadata和 Actors类:

public class TvShow{    public Metadata Metadata { get; set; }    public Actors Actors { get; set; }    public string Legal { get; set; }}public class Metadata{    public string Series { get; set; }    public string Title { get; set; }    public Datewww.easck.comTime AirDate { get; set; }    public int Episodes { get; set; }}public class Actors{    public string Names { get; set; }ojlfDZ}

构建主机时调用ConfigureAppConfiguration以指定应用程序的配置:
config.AddXmlFile("tvshow.xml", optional: true, reloadOnChange: true);
使用Bind方法将配置内容绑定到整个TvShow对象图。将绑定实例分配给用于呈现的属性:

public Startup(IConfiguration configuration){    Configuration = configuration;    var tvShow = new TvShow();    Configuration.GetSection("tvshow").Bind(tvShow);    var _tvShow = tvShow;}

当应用程序启动时会提供XML文件配置内容:

ASP.NETCore中的Configuration配置二

还有一种Bind方法可以将配置内容绑定到整个TvShow对象图:

public Startup(IConfiguration configuration){    Configuration = configuration;    var _tvShow = Configuration.GetSection("tvshow").Get<TvShow>();}

当应用程序启动时会提供XML文件配置内容:

ASP.NETCore中的Configuration配置二

4.将数组绑定至类

Bind方法也支持把配置内容键中的数组绑定到对象类去。公开数字键段(:0:、:1:、… :{n}:)的任何数组格式都能够与POCO类数组进行绑定。使用内存配置提供应用程序在示例中加载这些键和值:

public class Program{    public static Dictionary<string, string> arrayDict =            new Dictionary<string, string>            {                {"array:entries:0", "value0"},                {"array:entries:1", "value1"},                {"array:entries:2", "value2"},                {"array:entries:4", "value4"},                {"array:entries:5", "value5"}            };    public static void Main(string[] args)    {        CreateWebHostBuilder(args).Build().Run();    }    public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>        WebHost.CreateDefaultBuilder(args)            .ConfigureAppConfiguration((hostingContext, config) =>            {                config.SetBasePath(Directory.GetCurrentDirectory());                config.AddInMemoryCollection(arrayDict);            })            .UseStartup<Startup>();}

因为配置绑定程序无法绑定null值,所以该数组跳过了索引#3的值。在示例应用程序中,POCO类可用于保存绑定的配置数据:

public class ArrayExample{    public string[] Entries { get; set; }}

将配置数据绑定至对象:

public Startup(IConfiguration configuration){    Configuration = configuration;    var arrayExample = new ArrayExample();    Configuration.GetSection("array").Bind(arrayExample);    var _arrayExample = arrayExample;}

还可以使用ConfigurationBinder.Get<T>语法,从而产生更精简的代码:

public Startup(IConfiguration configuration){    Configuration = configuration;    var _arrayExample = _config.GetSection("array").Get<ArrayExample>();}

当应用程序启动时会提供内存配置内容:

ASP.NETCore中的Configuration配置二

5.在Razor Pages页或MVC视图中访问配置

若要访问RazorPages页或MVC视图中的配置设置,请为Microsoft.Extensions.Configuration命名空间添加using指令(C#参考:using指令)并将IConfiguration注入页面或视图。
在Razor页面页中:

@page@model IndexModel@using Microsoft.Extensions.Configuration@inject IConfiguration Configuration<!DOCTYPE html><html lang="en"><head>    <title>Index Page</title></head><body>    <h1>Access configuration in a Razor Pages page</h1>    <p>Configuration value for 'key': @Configuration["key"]</p></body></html>

在MVC视图中:

@using Microsoft.Extensions.Configuration@inject IConfiguration Configuration<!DOCTYPE html><html lang="en"><head>    <title>Index View</title></head><body>    <h1>Access configuration in an MVC view</h1>    <p>Configuration value for 'key': @Configuration["key"]</p></body></html>

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。