目录:

  1. 简单配置(利用configration 键值读取)
  2. 使用选项和配置对象(自定义类绑定配置文件实现读取)
  3. IOptionsSnapshot(配置文件更改时也变化)
  4. 内存数据放到配置对象中
  5. 实体框架自定义配置
  6. 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 例子——配置操作的更多相关文章

  1. 十二个 ASP.NET Core 例子

    原文地址:http://piotrgankiewicz.com/2017/04/17/asp-net-core-12-samples/ 作者:Piotr Gankiewicz 翻译:杨晓东(Savor ...

  2. 十二个 ASP.NET Core 例子——中间件

    目录: 什么是中间件(IApplicationBuilder) 创建 顺序规则 Asp.Net Core 内置的中间件 1.什么是中间件 官方:中间件是组装成应用程序管道以处理请求和响应的软件.每个组 ...

  3. 十二个 ASP.NET Core 例子——过滤器

    目录: 过滤器介绍 过滤器类别 自定义过滤器和过滤特性 直接短路返回内容 过滤器与中间件的区别 如果要全局日志,不要用过滤器 官方文档传送门 1.过滤器介绍 没有权限直接返回,资源缓存,Action执 ...

  4. 十二个 ASP.NET Core 例子——1.1版本 EF MySql快速搭建

    core1.0的时候搭建过一次mysql EF. 一大推问题.最近在core1.1 又重新搭了一次.简单搭建还挺快,没出现什么幺蛾子.总结下步骤 建立项目,例如ASP.NET Core1.1 WebA ...

  5. 十二个 ASP.NET Core 例子——IOC

    目录 简单介绍 core自带IOC的实现解释 1.简单介绍 (个人理解) 是什么:IOC是一种设计原则,而非设计模式,是对流程控制,当你注入你需要的定制化类时,流程就确定了 怎么用:和IOC容器说你这 ...

  6. ASP.NET Core的配置(4):多样性的配置来源[中篇]

    我们在本篇文章中会介绍三种针对物理文件的ConfiguationProvider,它们分别是针对JSON文件的JsonConfiguationProvider,针对XML文件的XmlConfiguat ...

  7. ASP.NET Core的配置(3): 将配置绑定为对象[上篇]

    出于编程上的便利,我们通常不会直接利用ConfigurationBuilder创建的Configuration对象读取某个单一配置项的值,而是倾向于将一组相关的配置绑定为一个对象,我们将后者称为Opt ...

  8. ASP.NET Core的配置(5):配置的同步[设计篇]

    本节所谓的"配置同步"主要体现在两个方面:其一,如何监控配置源并在其变化的时候自动加载其数据,其目的是让应用中通过Configuration对象承载的配置与配置源的数据同步:其二. ...

  9. ASP.NET Core的配置(4):多样性的配置来源[上篇]

    较之传统通过App.config和Web.config这两个XML文件承载的配置系统,ASP.NET Core采用的这个全新的配置模型的最大一个优势就是针对多种不同配置源的支持.我们可以将内存变量.命 ...

随机推荐

  1. QT中定时器的使用方法

    前言:因为QT中用死循环会开销很多内存容易崩溃,这时候使用定时器可以很好解决这个问题. 使用定时器需要用到头文件:include<QTimer> (1)定义定时器 QTimer *upda ...

  2. spring_boot_pay支付宝,微信,银联支付详细代码案例

    spring-boot-pay 支付服务:支付宝,微信,银联详细代码案例(除银联支付可以测试以外,支付宝和微信支付测试均需要企业认证,个人无法完成测试),项目启动前请仔细阅读 注意事项  . 友情提示 ...

  3. prototype为对象添加属性和方法

    可以通过prototype来为已经定义好的的"类"添加属性和方法.这里来了解一下prototype的基础知识.prototype是"构造函数"的属性,不是实例的 ...

  4. 3、公司开会的必要性 - CEO之公司管理经验谈

    这几天在考虑开公司的问题.以前也有想过开公司创业,但是由于资金和团队问题搁置了.今天在网上看到了一篇文“[转]微软是这么管理员工的!你一定向往!”,想起以前在其它公司时开的一些会议的问题,就写了此文, ...

  5. C# DataGridVie利用model特性动态加载列

    今天闲来无事看到ORm的特性映射sql语句.我就想到datagridview也可以用这个来动态添加列.这样就不用每次都去界面上点开界面填列了. 代码简漏希望有人看到了能指点一二. 先定义好Datagr ...

  6. 大数据学习系列之八----- Hadoop、Spark、HBase、Hive搭建环境遇到的错误以及解决方法

    前言 在搭建大数据Hadoop相关的环境时候,遇到很多了很多错误.我是个喜欢做笔记的人,这些错误基本都记载,并且将解决办法也写上了.因此写成博客,希望能够帮助那些搭建大数据环境的人解决问题. 说明: ...

  7. Netty入门之客户端与服务端通信(二)

    Netty入门之客户端与服务端通信(二) 一.简介 在上一篇博文中笔者写了关于Netty入门级的Hello World程序.书接上回,本博文是关于客户端与服务端的通信,感觉也没什么好说的了,直接上代码 ...

  8. Tsung测试Tcp协议的应用或接口

    利用Tsung模拟基于Tcp的业务流程,实属无奈.因ConnectManager部署在linux下,其中,Loadrunner的winsocket因不支持linux platform而无法使用,而Jm ...

  9. 关于setTimeout的面试题

    于地铁上看了一篇帖子,关于setTimeout的面试题,觉得见得多,记录,以学习之. 我们都知道,这样的一个例子: for ( var i = 0;i<5; i++) { console.log ...

  10. 一天就学会Android开发四大组件

    这个文章主要是讲Android开发的四大组件,本文主要分为 一.Activity详解二.Service详解三.Broadcast Receiver详解四.Content Provider详解外加一个重 ...