(12)ASP.NET Core 中的配置二(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(args).Build().Run();
}
public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.ConfigureAppConfiguration((hostingContext, config) =>
{
config.AddInMemoryCollection(_dict);
})
.UseStartup<Startup>();
}
而通过启动应用程序时会看到如下配置信息:
1.1GetValue
ConfigurationBinder.GetValue<T>从具有指定键的配置中提取一个值,并可以将其转换为指定类型。如果未找到该键,则获取配置默认值。如上述示例中,配置两个value1、value2值,现在我们在键MemoryCollectionKey1配置中提取对应字符串值,如果找不到配置键MemoryCollectionKey1,则默认使用value3配置值,示例代码如下:
public Startup(IConfiguration configuration)
{
Configuration = configuration;
var config = Configuration.GetValue<string>("MemoryCollectionKey1", "value3");
}
而通过启动应用程序时会看到如下配置信息:
ConfigurationBinder.GetValue找到定义string类型MemoryCollectionKey1键值并输出。如果我们把获取键名称更改为MemoryCollectionKey3,再来看看获取键值输出结果:
我们会看到当ConfigurationBinder.GetValue找不到定义string类型MemoryCollectionKey3键时,则输出默认值。
2.绑定到实体类
可以使用选项模式将文件配置绑定到相关实体类。配置值作为字符串返回,但调用Bind 可以绑定POCO对象。Bind在Microsoft.Extensions.Configuration.Binder包中,后者在 Microsoft.AspNetCore.App元包中。现在我们在CoreWeb/Models目录下新增一个叫starship.json文件,配置内容如下:
{
"starship": {
"name": "USS Enterprise",
"registry": "NCC-1701",
"class": "Constitution",
"length": 304.8,
"commissioned": false
},
"trademark": "Paramount Pictures Corp. http://www.paramount.com"
}
然后再新增一个对应配置内容的实体模型(/Models/Starship.cs):
public class Starship
{
public string Name { get; set; }
public string Registry { get; set; }
public string Class { get; set; }
public decimal Length { get; set; }
public bool Commissioned { get; set; }
}
构建主机时调用ConfigureAppConfiguration以指定应用程序的配置:
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.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文件配置内容:
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>//</airdate>
<episodes></episodes>
</metadata>
<actors>
<names>Tom Baker, Louise Jameson, John Leeson</names>
</actors>
<legal>(c) 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 DateTime AirDate { get; set; }
public int Episodes { get; set; }
}
public class Actors
{
public string Names { get; set; }
}
构建主机时调用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文件配置内容:
还有一种Bind方法可以将配置内容绑定到整个TvShow对象图:
public Startup(IConfiguration configuration)
{
Configuration = configuration;
var _tvShow = Configuration.GetSection("tvshow").Get<TvShow>();
}
当应用程序启动时会提供XML文件配置内容:
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>();
}
当应用程序启动时会提供内存配置内容:
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>
参考文献:
ASP.NET Core 中的配置
(12)ASP.NET Core 中的配置二(Configuration)的更多相关文章
- 3、带你一步一步学习ASP.NET Core中的配置之Configuration
如果你是刚接触ASP.NET Core的学习的话,你会注意到:在ASP.NET Core项目中,看不到.NET Fraemwork时代中的web.config文件和app.config文件了.那么你肯 ...
- (11)ASP.NET Core 中的配置一(Configuration)
1.前言 ASP.NET Core在应用程序上引入Microsoft.Extensions.Configuration配置,可以支持多种方式配置,包括命令行配置.环境变量配置.文件配置.内存配置,自定 ...
- 聊聊ASP.NET Core中的配置
作为软件开发人员,我们当然喜欢一些可配置选项,尤其是当它允许我们改变应用程序的行为而无需修改或编译我们的应用程序时.无论你是使用新的还是旧的.NET时,可能希望利用json文件的配置.在这篇文章中, ...
- 翻译 - ASP.NET Core 基本知识 - 配置(Configuration)
翻译自 https://docs.microsoft.com/en-us/aspnet/core/fundamentals/configuration/?view=aspnetcore-5.0 ASP ...
- ASP.NET Core 中的配置
目录 以键-值对的形式读取配置 多环境配置 读取结构化的配置数据 参考 .NET Core 定义配置的方式不同于之前 NET 版本,之前是依赖于 System.Configuration 的 app. ...
- ASP.NET Core 学习笔记 第四篇 ASP.NET Core 中的配置
前言 说道配置文件,基本大多数软件为了扩展性.灵活性都会涉及到配置文件,比如之前常见的app.config和web.config.然后再说.NET Core,很多都发生了变化.总体的来说技术在进步,新 ...
- ASP.NET Core中的配置
配置 参考文件点击跳转 配置来源 命令行参数 自定义提供程序 目录文件 环境变量 内存中的.NET 对象 文件 默认配置 CreateDefaultBuilder方法提供有默认配置,在这个方法中会接收 ...
- IdentityServer4在Asp.Net Core中的应用(二)
继续上次授权的内容,客户端模式后我们再说以下密码模式,先回顾下密码模式的流程: 我们还是使用上次的代码,在那基础上修改,在IdentityServer4里面有一个IdentityServer4.Tes ...
- (13)ASP.NET Core 中的选项模式(Options)
1.前言 选项(Options)模式是对配置(Configuration)的功能的延伸.在12章(ASP.NET Core中的配置二)Configuration中有介绍过该功能(绑定到实体类.绑定至对 ...
随机推荐
- 编写loadrunner的ftp脚本(详细步骤)
大家好,主要给大家讲解编写loadrunner的ftp脚本详细步骤,及FTP函数注释,及FTP脚本两种编写方式,手动和录制.亲测 No problem!^_^ 1.首先要了解loadrunner中几个 ...
- Jenkins与RocketChat集成
Jenkins与RocketChat集成 在Jenkins中安装插件RocketChat Notifier 配置信息 点击Jenkins左侧的系统管理-->系统设置, 找到Global Rock ...
- ACM之路(转载)
转载自:https://www.cnblogs.com/tianjintou/p/4139416.html 要注意,ACM的竞赛性强,因此自己应该和自己的实际应用联系起来. 适合自己的才是好的,有的人 ...
- 用户点击获取验证码之后我们会发送一条信息到用户手机,然后就会出现一个倒计时按钮,很像支付宝手机付款效果了,下面我给大家分享两个js效果
js代码 代码如下 复制代码 <div class="input"> <input type="button" id="bt ...
- Codeforces Gym101518F:Dimensional Warp Drive(二分+高斯消元)
题目链接 题意 给出一个11元组A和11元组B,给出n个11元方程,每个方程有一个日期,要让A变成B,问最少需要日期多少才可以变. 思路 因为日期满足单调性,所以可以二分答案.判断的时候就是高斯消元套 ...
- Python之matplotlib库学习:实现数据可视化
1. 安装和文档 pip install matplotlib 官方文档 为了方便显示图像,还使用了ipython qtconsole方便显示.具体怎么弄网上搜一下就很多教程了. pyplot模块是提 ...
- 不使用 ASR 将虚机还原到另一个数据中心
背景 在 Azure 上可能会遇到一个场景是将一台虚机搬到另一台数据中心,在不借助 ASR 的情况下我们该如何做? 因为 ASR 在云上更多的场景是用于灾备到异地.对于虚机的相关信息主要的是磁盘和网络 ...
- WebLogic 任意文件上传远程代码执行_CVE-2018-2894漏洞复现
WebLogic 任意文件上传远程代码执行_CVE-2018-2894漏洞复现 一.漏洞描述 Weblogic管理端未授权的两个页面存在任意上传getshell漏洞,可直接获取权限.Oracle 7月 ...
- PCB 板边倒圆角的实现方法(基本算法一)
PCB外形是直角时外形时,通常工程制作时,外是直角或尖角的地方倒圆角,主要是为了防止板边容易划伤板且容易扎伤人 所以当客户没有特殊要求时,PCB外形是直角时一般会默认倒角0.5mm圆角(如下图所示) ...
- Java编程思想:内部类中级部分
public class Test { public static void main(String[] args) { // Parcel4Test.test(); // Parcel5_1.tes ...