十二个 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采用的这个全新的配置模型的最大一个优势就是针对多种不同配置源的支持.我们可以将内存变量.命 ...
随机推荐
- 从0到上线开发企业级电商项目_前端_01_sublime使用技巧
一.用户设置 { "color_scheme": "Packages/Color Scheme - Default/Monokai.tmTheme", &quo ...
- 微信小程序参数二维码6问6答
微信小程序参数二维码[基础知识篇],从6个常见问题了解小程序参数二维码的入门知识. 1.什么是小程序参数码? 微信小程序参数二维码:针对小程序特定页面,设定相应参数值,用户扫描后进入相应的页面. 2. ...
- 初识BASH SHELL
什么是Shell shell翻译成中文就是"壳"的意思.简单来说就是shell是计算机用户与操作系统内核进行"沟通"的一种工具.Windows系统中有power ...
- Linux知识--初始linux
从今天开始陆续分享Linux的知识 因为服务器基本是Linux的 所以Linux不学明白 Shell命令不熟 会让你的办事效率大打折扣. 一.Linux文件系统 Linux文件系统是从Unix结构 ...
- Specified key was too long max key length is 1000 bytes
Mysql建立索引时遇到一个问题就是索引字段长度太长,解决办法: 1.修改字段长度 : 2.修改mysql默认的存储引擎 ,修改为INNODB: https://www.2cto.com/databa ...
- grpc 入门(一)--hello world
一,从rpc接口的定义说起,下面给一个最简单的grpc示例--hello world 在这个rpc横行的世界里,实现一个rpc很重要的一件事就是定义一个好接口,一个好的接口定义会让你省去很多麻烦.熟悉 ...
- C++ 脑筋急转弯
最近重新温习一下C++的基础知识,这里给大家分享一下,独痛苦不如众痛苦. 先贴出一段示例代码如下: class CTest{ public: CTest(){ ); }; ~CTest(){ if ( ...
- 线上服务器上安装的VNCServer不能正常工作
1.问题描述: 线上服务器上安装的不能正常工作 2.解决问题过程: 一. 重启vncserver 运行命令:vncserver -kill :1和vncserver :1 二. 发现vncserver ...
- JDBC详解系列(四)之建立Stament和执行SQL语句
建立Stament 在获得连接之后,我们就可以跟数据库进行交互了. 在JDBC中,我们发送SQL语句到数据库这些操作时通过Stament,Preparement,CallableStateme ...
- 教你用.Net来玩微信跳一跳
目前开发的所有代码都已经上传到了GitHub.欢迎大家来Star https://github.com/GiantLiu/AutoJump 目前程序分为“全自动版本”和“半自动版本” 全自动版本 We ...