更新 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. 零基础Python爬虫实现(爬取最新电影排行)

    提示:本学习来自Ehco前辈的文章, 经过实现得出的笔记. 目标网站 http://dianying.2345.com/top/ 网站结构 要爬的部分,在ul标签下(包括li标签), 大致来说迭代li ...

  2. python简说(十五)MD5加密

    def my_md5(s): news = str(s).encode() m = hashlib.md5(news) return m.hexdigest()

  3. javascript 点击按钮实现隐藏显示切换效果

    原文链接:http://www.jb51.net/article/79083.htm <html> <head> <meta charset="gb2312&q ...

  4. CentOS 7下搭建配置 SVN 服务器

    原文链接:https://www.cnblogs.com/tdalcn/p/6937714.html 同步:http://blog.csdn.net/u011884440/article/detail ...

  5. 2018-2019-2 《网络对抗技术》Exp4 恶意代码分析20165211

    目录 实践内容概述 实践目标 实践内容 实验问题回答 实践过程记录 系统运行监控 使用schtacks指令监控系统运行 使用sysmon工具监控系统运行 恶意软件分析 使用Virus Total分析恶 ...

  6. 牛客网数据库SQL实战(6-10)

    6.查找所有员工入职时候的薪水情况,给出emp_no以及salary, 并按照emp_no进行逆序CREATE TABLE `employees` (`emp_no` int(11) NOT NULL ...

  7. Install Virtualbox on ubuntu

    1.Use the command: sudo apt-get install virtualbox

  8. Delphi XE5 for Android (十一)

    以下内容是根据Delphi的帮助文件进行试验的,主要测试Android下的消息提醒. 首先建立一个空白的Android工程,然后在窗体中加入一个TNotificationCenter控件,如下图: 再 ...

  9. Bootstrap3基础 pagination 分页按钮 简单示例

      内容 参数   OS   Windows 10 x64   browser   Firefox 65.0.2   framework     Bootstrap 3.3.7   editor    ...

  10. P3979 遥远的国度

    P3979 遥远的国度 思路 一开始我用这个函数得到左端点 int get_l(int x,int y) { if(top[x]==top[y]) return son[x]; int last=to ...