十二个 ASP.NET Core 例子——配置操作
目录:
- 简单配置(利用configration 键值读取)
- 使用选项和配置对象(自定义类绑定配置文件实现读取)
- IOptionsSnapshot(配置文件更改时也变化)
- 内存数据放到配置对象中
- 实体框架自定义配置
- CommandLine配置(利用命令行配置)
注:这是院子里面大神提供的例子。传送门
1.简单配置(利用configration 键值读取)
注意点多级节点用“:”冒号
public static IConfigurationRoot Configuration { get; set; }//吐槽没有开放出来。每次都要new
public HomeController()
{
var builder = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("appsettings.json");
Configuration = builder.Build();
var value = Configuration["option1"];//一级节点
var value2 = Configuration["Logging:IncludeScopes"];//二级节点
var value3 = Configuration["Logging:LogLevel:Default"];//三级节点
var value4 = Configuration["Patients:1:Name"];//数据情况下,去第二个元素的第一节点
}
appsettings.json 文件
{
"ConnectionStrings": {
"DefaultConnection": "Server=(localdb)\\mssqllocaldb;Database=aspnet-AspNetCoreAuthIdentity-c52f1669-ef35-4a6f-af80-47f83d0b7b98;Trusted_Connection=True;MultipleActiveResultSets=true"
},
"Logging": {
"IncludeScopes": false,
"LogLevel": {
"Default": "Warning"
}
},
"option1": "value1_from_json",
"option2": ,
"Patients": [
{
"Name": "Gandalf",
"Age": ""
},
{
"Name": "Harry",
"Age": ""
}
]
}
2.使用选项和配置对象(自定义类绑定配置文件实现读取)
创建自己的类。
public class MyOptions
{
public MyOptions()
{
// Set default value.
Option1 = "value1_from_ctor";
}
public string Option1 { get; set; }
public int Option2 { get; set; } = ;
}
项目启动时注入到配置中Services.Configure
public void ConfigureServices(IServiceCollection services)
{
// Add framework services.
services.AddDbContext<ApplicationDbContext>(options =>
options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection"))); services.AddIdentity<ApplicationUser, IdentityRole>()
.AddEntityFrameworkStores<ApplicationDbContext>()
.AddDefaultTokenProviders(); services.AddMvc(); // Add application services.
services.AddTransient<IEmailSender, AuthMessageSender>();
services.AddTransient<ISmsSender, AuthMessageSender>(); // Register the IConfiguration instance which MyOptions binds against.
services.Configure<MyOptions>(Configuration);
}
获取值
private readonly MyOptions _options;
public HomeController(IOptions<MyOptions> options)
{
_options = options.Value;
}
appsetting.json不用和类的字段完全一致,只要包含就可以了
3.IOptionsSnapshot(配置文件更改时也变化)
private readonly MyOptions _options;
public HomeController(IOptionsSnapshot<MyOptions> options)
{
_options = options.Value;
}
IOptionsSnapshot的作用:在配置文件修改的时候,配置数据也会变化。(刷新页面)
4.内存数据放到配置对象中(AddInMemoryCollection)
public static IConfigurationRoot Configuration { get; set; }
public HomeController()
{
var dict = new Dictionary<string, string>
{
{"Profile:MachineName", "Rick"},
{"App:MainWindow:Height", ""},
{"App:MainWindow:Width", ""},
{"App:MainWindow:Top", ""},
{"App:MainWindow:Left", ""}
};
var builder = new ConfigurationBuilder();
builder.AddInMemoryCollection(dict);
Configuration = builder.Build();
var vlaue = Configuration["Profile:MachineName"];
}
顾名思义,不用去配置文件中读取,可以直接把内存中的数据放到配置对象中。【感觉有点没必要,既然在内存中,为什么不直接用】
这里还讲了一个GetValue<T>;作用:确定配置的值类型,设置默认值。用法:Configuration.GetValue<int>("App:MainWindow:Left", 80);
5.实体框架自定义配置(AddEntityFrameworkConfig)
利用EF读取数据库读取数据和写入数据。 类似利用EF 对数据库数据操作。
1.创建实体类 2.创建DbContext 3.创建自定义配置提供程序EFConfigProvider,4.创建资源给Provider,5.AddEntityFrameworkConfig 6.读取
代码较多操作较多就不贴了。。
6.CommandLine配置(AddCommandLine)命令行配置
先添加引用“Microsoft.Extensions.Configuration.CommandLine”
控制台类型下,添加命令行参数

public static IConfigurationRoot Configuration { get; set; }
public static Dictionary<string, string> GetSwitchMappings(
IReadOnlyDictionary<string, string> configurationStrings)
{
return configurationStrings.Select(item =>
new KeyValuePair<string, string>(
"-" + item.Key.Substring(item.Key.LastIndexOf(':') + ),
item.Key))
.ToDictionary(
item => item.Key, item => item.Value);
}
public static void Main(string[] args = null)
{
var dict = new Dictionary<string, string>
{
{"Profile:MachineName", "Rick"},
{"App:MainWindow:Left", ""}
};
var builder = new ConfigurationBuilder();
builder.AddInMemoryCollection(dict)
.AddCommandLine(args, GetSwitchMappings(dict));
Configuration = builder.Build();
Console.WriteLine($"Hello {Configuration["Profile:MachineName"]}");
// Set the default value to 80
var left = Configuration.GetValue<int>("App:MainWindow:Left", );
Console.WriteLine($"Left {left}");
Console.ReadKey();
}
注意:命令行参数有一定的格式,也可以利用GetSwitchMappings自定义格式。
十二个 ASP.NET Core 例子——配置操作的更多相关文章
- 十二个 ASP.NET Core 例子
原文地址:http://piotrgankiewicz.com/2017/04/17/asp-net-core-12-samples/ 作者:Piotr Gankiewicz 翻译:杨晓东(Savor ...
- 十二个 ASP.NET Core 例子——中间件
目录: 什么是中间件(IApplicationBuilder) 创建 顺序规则 Asp.Net Core 内置的中间件 1.什么是中间件 官方:中间件是组装成应用程序管道以处理请求和响应的软件.每个组 ...
- 十二个 ASP.NET Core 例子——过滤器
目录: 过滤器介绍 过滤器类别 自定义过滤器和过滤特性 直接短路返回内容 过滤器与中间件的区别 如果要全局日志,不要用过滤器 官方文档传送门 1.过滤器介绍 没有权限直接返回,资源缓存,Action执 ...
- 十二个 ASP.NET Core 例子——1.1版本 EF MySql快速搭建
core1.0的时候搭建过一次mysql EF. 一大推问题.最近在core1.1 又重新搭了一次.简单搭建还挺快,没出现什么幺蛾子.总结下步骤 建立项目,例如ASP.NET Core1.1 WebA ...
- 十二个 ASP.NET Core 例子——IOC
目录 简单介绍 core自带IOC的实现解释 1.简单介绍 (个人理解) 是什么:IOC是一种设计原则,而非设计模式,是对流程控制,当你注入你需要的定制化类时,流程就确定了 怎么用:和IOC容器说你这 ...
- ASP.NET Core的配置(4):多样性的配置来源[中篇]
我们在本篇文章中会介绍三种针对物理文件的ConfiguationProvider,它们分别是针对JSON文件的JsonConfiguationProvider,针对XML文件的XmlConfiguat ...
- ASP.NET Core的配置(3): 将配置绑定为对象[上篇]
出于编程上的便利,我们通常不会直接利用ConfigurationBuilder创建的Configuration对象读取某个单一配置项的值,而是倾向于将一组相关的配置绑定为一个对象,我们将后者称为Opt ...
- ASP.NET Core的配置(5):配置的同步[设计篇]
本节所谓的"配置同步"主要体现在两个方面:其一,如何监控配置源并在其变化的时候自动加载其数据,其目的是让应用中通过Configuration对象承载的配置与配置源的数据同步:其二. ...
- ASP.NET Core的配置(4):多样性的配置来源[上篇]
较之传统通过App.config和Web.config这两个XML文件承载的配置系统,ASP.NET Core采用的这个全新的配置模型的最大一个优势就是针对多种不同配置源的支持.我们可以将内存变量.命 ...
随机推荐
- docker:(1)docker基本命令使用及发布镜像
docker镜像可以完全看作一台全新的电脑使用,无论什么镜像都是对某一东西进行了配置,然后打包后可以快速移植到需要的地方直接使用 省去复杂的配置工作 比如java web项目部署,如果是新部署,需要装 ...
- HBase跨地区机房的压测小程序——从开发到打包部署(图文版)
今天做了一个跨地区机房的压测小程序,主要的思路就是基于事先准备好的rowkey文件,利用多线程模拟并发的rowkey查询,可以实现并发数的自由控制.主要是整个流程下来,遇到了点打包的坑,所以特意记录下 ...
- Git详解之一:Git起步
起步 本章介绍开始使用 Git 前的相关知识.我们会先了解一些版本控制工具的历史背景,然后试着让 Git 在你的系统上跑起来,直到最后配置好,可以正常开始开发工作.读完本章,你就会明白为什么 Git ...
- TCP协议(二)——TIME_WAIT状态
当TCP主动关闭套接字时,采用四步握手机制来彻底关闭连接.如图: 客户端主动关闭连接,发送FIN段到服务端.TCP状态由ESTABLISHED(连接状态)转为FIN_WAIT1(表示,发送的FIN需要 ...
- mac os x使用Git和bitbucket
简而言之,Git是一个分布式的代码版本管理工具.类似的常用工具还有SVN,CVS. Git相比SVN,CVS,最大的特点也是优点在于提供分布式的代码管理.这不是说SVN等不具有该功能,但就目前来看,G ...
- SQL SERVER 日期转换大全
博客转自:http://blog.csdn.net/baiduandxunlei/article/details/9180075 CONVERT(data_type,expression[,style ...
- [总结]-2018 w1
不想总结 2017,过去的就过去吧,不过自己在 2017 年还是收获了很多,最重要的就是赚钱.赚钱还是需要两把刷子,所以,2018 的小目标就是学习数据分析和机器学习.希望自己在这两个领域能搞点事情. ...
- TurnipBit:和孩子一起动手DIY“滚动”的生日礼物
当孩子的生日来临之时,做父母的总是会为该为孩子准备什么礼物而烦恼.下面就教家长朋友们利用TurnipBit开发板DIY一份"特殊"的生日礼物,不仅能增加与孩子的互动性还能提升孩子在 ...
- 【图文】如何在centos上安装tomcat
先到tomcat官网下载安装包(随便下载你想要的版本) 假设你现在使用的是windows系统 那么就把你下载来的压缩包解压,放到一个目录中 在你本地的windows系统中安装个xshell和xftp ...
- Python爬虫知识点一
一.入门知识: 1.1.HTTP简介HTTP = HyperText Transfer ProtocolURI = Uniform Resource IdentifierURL = Uniform R ...