更新 2020-01-11

IOptions 默认值

  var config = ServiceProvider.GetService<IOptions<UploadedFilesPathOptions>>();

即便我们忘了 setup (下图), 我们依然会拿到一个对象(上图), 里面的 value 是 default value

services.Configure<UploadedFilesPathOptions>(Configuration.GetSection("UploadedFilesPath"));

https://blog.wille-zone.de/post/is-ioptions-t-bad/

可能这个行为不是很好理解,因为一般上 DI 如果没有 provide, inject 时是返回 null.

文章说如果你不喜欢可以使用 IOption Factory 改掉这个行为...

更新 : 2019-05-05

name options

 services.Configure<SlackApiSettings>("Dev", Configuration.GetSection("SlackApi:DevChannel")); 

第一个变量是名字, 然后如下获取

    public SlackNotificationService(IOptionsSnapshot<SlackApiSettings> options)
{
SlackApiSettings devSettings = options.Get("Dev");
}

identity 就是用了这个手法在 CookieAuthenticationOptions 上哦.

更新 : 2019-05-03

set options in startup config

services.Configure<BusinessOptions>(Configuration.GetSection("Email")) // set from appsetting
.Configure<BusinessOptions>(options => { add more
options.Price = ;
options.Name = "zhu ba jie";
});

参考 : https://cnblogs.com/nianming/p/7083964.html

配置写在 appsettings.json 里头

比如

{
"object": {
"prop": "value"
},
"array": [
{ "prop": "value" }
],
"businessConfig": {
"paypalEmail" : "hengkeat87@gmail.com"
}
}

startup.cs

namespace Project
{
public class BusinessConfig
{
public string paypalEmail { get; set; }
} public class Startup
{
public Startup(IConfiguration configuration)
{
this.configuration = configuration;
} public IConfiguration configuration { get; }
public void ConfigureServices(IServiceCollection services)
{
// 各种获取 config 的方式
var value = configuration["object:prop"];
value = configuration["array:0:prop"];
var obj = configuration.GetSection("object");
value = obj["prop"]; // 绑定类型
string stringValue = configuration.GetValue<string>("object:prop");
BusinessConfig businessConfig = configuration.GetSection("businessConfig").Get<BusinessConfig>(); // 注册到 service 让 control 可以注入
services.Configure<BusinessConfig>(configuration.GetSection("businessConfig"));
}
}
}

controller.cs

public class HomeController : Controller
{
private readonly BusinessConfig businessConfig;
public HomeController( // IOptionsSnapshot 对比 IOptions 特色是更新 config file 时, snapshot 能获取新值, 很奇怪, 不是说 snapshot 吗 ? 怎么反而可以获取到新值...纳闷
IOptionsSnapshot<BusinessConfig> businessConfigOptionsAccessor, // 能
// IOptions<BusinessConfig> businessConfigOptionsAccessor // 不能
)
{
businessConfig = businessConfigOptionsAccessor.Value;
} public IActionResult Index()
{
string paypalEmail = businessConfig.paypalEmail;
return View();
}
}

Configuration 是可以随时 set 的. 要使用 options 获取 config 就一定要执行 services.Configure.

由于 key-vault 只能放在第一层,所以我们通常需要额外功夫 set 进去.

Configuration["email:password"] = Configuration["key-vault-secret-email-password"];
services.Configure<Email>(Configuration.GetSection("email"));

Asp.net core 学习笔记 ( Configuration 配置 )的更多相关文章

  1. ASP.NET Core 学习笔记 第四篇 ASP.NET Core 中的配置

    前言 说道配置文件,基本大多数软件为了扩展性.灵活性都会涉及到配置文件,比如之前常见的app.config和web.config.然后再说.NET Core,很多都发生了变化.总体的来说技术在进步,新 ...

  2. Asp.Net Core学习笔记:入门篇

    Asp.Net Core 学习 基于.Net Core 2.2版本的学习笔记. 常识 像Django那样自动检查代码更新,自动重载服务器(太方便了) dotnet watch run 托管设置 设置项 ...

  3. ASP.NET Core 学习笔记 第一篇 ASP.NET Core初探

    前言 因为工作原因博客断断续续更新,其实在很早以前就有想法做一套关于ASP.NET CORE整体学习度路线,整体来说国内的环境的.NET生态环境还是相对比较严峻的,但是干一行爱一行,还是希望更多人加入 ...

  4. ASP.NET Core 学习笔记 第三篇 依赖注入框架的使用

    前言 首先感谢小可爱门的支持,写了这个系列的第二篇后,得到了好多人的鼓励,也更加坚定我把这个系列写完的决心,也能更好的督促自己的学习,分享自己的学习成果.还记得上篇文章中最后提及到,假如服务越来越多怎 ...

  5. ASP.NET Core 学习笔记 第五篇 ASP.NET Core 中的选项

    前言 还记得上一篇文章中所说的配置吗?本篇文章算是上一篇的延续吧.在 .NET Core 中读取配置文件大多数会为配置选项绑定一个POCO(Plain Old CLR Object)对象,并通过依赖注 ...

  6. Asp.net Core学习笔记

    之前记在github上的,现在搬运过来 变化还是很大的,感觉和Nodejs有点类似,比如中间件的使用 ,努力学习ing... 优点 不依赖IIS 开源和跨平台 中间件支持 性能优化 无所不在的依赖注入 ...

  7. Asp.net core 学习笔记 ( Data protection )

    参考 : http://www.cnblogs.com/xishuai/p/aspnet-5-identity-part-one.html http://cnblogs.com/xishuai/p/a ...

  8. Asp.net core 学习笔记 ( Web Api )

    asp.net core 把之前的 webapi 和 mvc 做了结合. mvc 既是 api. 但是后呢,又发现, api 确实有独到之处,所以又开了一些补助的方法. namespace Proje ...

  9. Asp.net core 学习笔记 ( IIS, static file 性能优化 )

    更新 : 2019-02-06 最后还是把 rewrite 给替换掉了. 所以 rewrite url 也不依赖 iis 了咯. refer : https://docs.microsoft.com/ ...

随机推荐

  1. ERROR 1526 (HY000): Table has no partition for value xxx

    最近,我们有些功能需要使用到基于多个字段的分区,需要同时支持oracle/mysql,但是开发人员又希望尽可能少的改动业务代码,也不愿意使用多列分区,在oracle 11g之前,不支持多列分区(12. ...

  2. windows 7/10 安装u盘制作

    今天,在拷贝数据时,发现那台丢在那两三年的pc密码忘了,故计划重装,因为从来都是公司信息中心管这事,至少都七八年没有自己装机了,故整理过程如下: 1.从itellyou.cn下载原版镜像: 2.准备一 ...

  3. 做了 3 年企业级 SaaS,我收获的 10 点心得(转)

    关于中国企业级服务的总结不少,本土派和海外派都有出色的文章出来,VC 和创业者站在各自角度也有很多不错的总结.本文基于 Ping++ 近三年的创业历程而来,有弯路,有教训,有醒悟,也有心得.盛景 B2 ...

  4. MySql数据库概念

    一.什么是数据库? 数据库(Database)是按照数据结构来组织.存储和管理数据的建立在计算机存储设备上的仓库. 简单来说是本身可视为电子化的文件柜——存储电子文件的处所,用户可以对文件中的数据进行 ...

  5. Building a Keras + deep learning REST API(三部曲之一)

    一.基本环境 )     image = imagenet_utils.preprocess_input(image)     , ))             ]:                  ...

  6. Babel总结

    什么是babel? babel是一个JavaScript编译器. Babel是一个工具链,主要用于将ECMAScript 2015+代码转换为向后兼容的旧浏览器或环境中JavaScript版本. 注解 ...

  7. bzoj 2820 YY的GCD - 莫比乌斯反演 - 线性筛

    Description 神犇YY虐完数论后给傻×kAc出了一题给定N, M,求1<=x<=N, 1<=y<=M且gcd(x, y)为质数的(x, y)有多少对kAc这种 傻×必 ...

  8. ODAC(V9.5.15) 学习笔记(三)TOraSession(3)

    3. 选项 TOraSession的Options有如下内容 名称 类型 说明 CharLength TCharLength 单个字符的长度,缺省0,表示从服务器获取对应的字符集中单个字符长度 Cha ...

  9. Python3 tkinter基础 Canvas create_line 画实线与虚线

             Python : 3.7.0          OS : Ubuntu 18.04.1 LTS         IDE : PyCharm 2018.2.4       Conda ...

  10. linux下如何使make只输出执行过程中的命令序列

    答: make -n (-n.--just-print.--dry-run.--recon等价)