做佛教网站/福建seo学校

做佛教网站,福建seo学校,html可以做网站分页,网站建设公司效果通过Rider调试的方式看了下ASP.NET Core 5.0的Web API默认项目,重点关注Host.CreateDefaultBuilder(args)中的执行过程,主要包括主机配置、应用程序配置、日志配置和依赖注入配置这4个部分。由于水平和篇幅有限,先整体理解、建立框架&#xf…

  通过Rider调试的方式看了下ASP.NET Core 5.0的Web API默认项目,重点关注Host.CreateDefaultBuilder(args)中的执行过程,主要包括主机配置、应用程序配置、日志配置和依赖注入配置这4个部分。由于水平和篇幅有限,先整体理解、建立框架,后面再逐步细化,对每个配置部分再详细拆解。ad00018218254d159ba2487abd68c645.png

一.创建默认主机Host.CreateDefaultBuilder

1.创建主机构建器CreateHostBuilder(args)

基于ASP.NET Core 5.0构建的Web API项目的Program.cs文件大家应该都很熟悉:

public class Program
{public static void Main(string[] args){CreateHostBuilder(args).Build().Run();}public static IHostBuilder CreateHostBuilder(string[] args) =>Host.CreateDefaultBuilder(args).ConfigureWebHostDefaults(webBuilder =>{webBuilder.UseStartup<Startup>();});
}

2.创建默认构建器Host.CreateDefaultBuilder(args)

本文重点讲解下Host.CreateDefaultBuilder(args)的执行过程,Microsoft.Extensions.Hosting.Host是一个静态类,包含2个方法:

public static IHostBuilder CreateDefaultBuilder() =>CreateDefaultBuilder(args: null);
public static IHostBuilder CreateDefaultBuilder(string[] args);

上面的方法最终调用的还是下面的方法,下面的方法主要包括几个部分:主机配置ConfigureHostConfiguration,应用程序配置ConfigureAppConfiguration,日志配置ConfigureLogging,依赖注入配置UseDefaultServiceProvider。

二.主机配置ConfigureHostConfiguration

主机配置ConfigureHostConfiguration相关源码如下:

builder.UseContentRoot(Directory.GetCurrentDirectory());
builder.ConfigureHostConfiguration(config =>
{config.AddEnvironmentVariables(prefix: "DOTNET_");if (args != null){config.AddCommandLine(args);}
});
428dff48a08da8d0cbd9e88fdc48e77e.png

1.内存配置源

Directory.GetCurrentDirectory()当前目录指的就是D:\SoftwareProject\C#Program\WebApplication3\WebApplication3

2.环境变量配置源

config.AddEnvironmentVariables(prefix: "DOTNET_")添加了前缀为DOTNET_的环境变量。

3.命令行配置源

最开始认为参数args为null,经过调试发现args的值string[0],并且args != null,所以会有命令行配置源CommandLineConfigurationSource。

三.应用程序配置ConfigureAppConfiguration

应用程序配置ConfigureAppConfiguration相关源码如下:

builder.ConfigureAppConfiguration((hostingContext, config) =>
{IHostEnvironment env = hostingContext.HostingEnvironment;bool reloadOnChange = hostingContext.Configuration.GetValue("hostBuilder:reloadConfigOnChange", defaultValue: true);config.AddJsonFile("appsettings.json", optional: true, reloadOnChange: reloadOnChange).AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true, reloadOnChange: reloadOnChange);if (env.IsDevelopment() && !string.IsNullOrEmpty(env.ApplicationName)){var appAssembly = Assembly.Load(new AssemblyName(env.ApplicationName));if (appAssembly != null){config.AddUserSecrets(appAssembly, optional: true);}}config.AddEnvironmentVariables();if (args != null){config.AddCommandLine(args);}
})
90daefb392150e061bbd7a9fabc19083.png

1.程序运行的主机环境

hostingContext.HostingEnvironment表示运行程序的主机环境,比如开发环境或者生产环境。IHostEnvironment接口的数据结构为:

public interface IHostEnvironment
{// Developmentstring EnvironmentName { get; set; }// WebApplication3string ApplicationName { get; set; }// D:\SoftwareProject\C#Program\WebApplication3\WebApplication3string ContentRootPath { get; set; }// PhysicalFileProviderIFileProvider ContentRootFileProvider { get; set; }
}

2.加载json配置文件

接下来就是通过AddJsonFile()来添加配置文件了,如下所示:
(1)Path(string):json文件的相对路径位置。
(2)Optional(bool):指定文件是否是必须的,如果为false,那么如果找不到文件就会抛出文件找不到异常。
(3)ReloadOnchange(bool):如果为true,那么当改变配置文件,应用程序也会随之更改而无需重启。在该项目中总共有2个配置文件,分别是appsettings.json和appsettings.Development.json。

3.添加用户秘钥配置源

config.AddUserSecrets(appAssembly, optional: true)主要是在开发的过程中,用来保护配置文件中的敏感数据的,比如密码等。因为平时在开发中很少使用,所以在此不做深入讨论,如果感兴趣可参考[3]。

四.日志配置ConfigureLogging

日志配置ConfigureLogging相关源码如下:

.ConfigureLogging((hostingContext, logging) =>
{bool isWindows = RuntimeInformation.IsOSPlatform(OSPlatform.Windows);if (isWindows){// Default the EventLogLoggerProvider to warning or abovelogging.AddFilter<EventLogLoggerProvider>(level => level >= LogLevel.Warning);}logging.AddConfiguration(hostingContext.Configuration.GetSection("Logging"));logging.AddConsole();logging.AddDebug();logging.AddEventSourceLogger();if (isWindows){// Add the EventLogLoggerProvider on windows machineslogging.AddEventLog();}logging.Configure(options =>{options.ActivityTrackingOptions = ActivityTrackingOptions.SpanId| ActivityTrackingOptions.TraceId| ActivityTrackingOptions.ParentId;});
})

1.Windows日志级别

从上述代码中可以看到是LogLevel.Warning及以上。

2.日志的配置

ILoggerProvider不同的实现方式有:ConsoleLoggerProviderDebugLoggerProviderEventSourceLoggerProviderEventLogLoggerProviderTraceSourceLoggerProvider自定义。下面是日志配置涉及的相关代码:

logging.AddConsole(); //将日志输出到控制台
logging.AddDebug(); //将日志输出到调试窗口
logging.AddEventSourceLogger();
logging.AddEventLog();

说明:这一部分详细的日志分析可以参考[6]。

3.ActivityTrackingOptions

public enum ActivityTrackingOptions
{None = 0, //No traces will be included in the logSpanId = 1, //The record will contain the Span identifierTraceId = 2, //The record will contain the tracking identifierParentId = 4, //The record will contain the parent identifierTraceState = 8, //The record will contain the tracking statusTraceFlags = 16, //The log will contain trace flags
}

在最新的.NET 7 Preview6中又增加了Tags(32)和Baggage(64)。

五.依赖注入配置UseDefaultServiceProvider

依赖注入配置UseDefaultServiceProvider相关源码如下:

.UseDefaultServiceProvider((context, options) =>
{bool isDevelopment = context.HostingEnvironment.IsDevelopment();options.ValidateScopes = isDevelopment;options.ValidateOnBuild = isDevelopment;
});

UseDefaultServiceProvider主要是设置默认的依赖注入容器。

参考文献:
[1].NET Source Browser:https://source.dot.net/
[2]Safe storage of app secrets in development in ASP.NET Core:https://docs.microsoft.com/en-us/aspnet/core/security/app-secrets?view=aspnetcore-6.0&tabs=windows
[3]认识ASP.NET Core/Host及其配置解析:https://zhuanlan.zhihu.com/p/343312339
[4]源码解析.Net中Host主机的构建过程:https://www.cnblogs.com/snailZz/p/15240616.html
[5].NET Core通用Host源码分析:https://www.cnblogs.com/yingbiaowang/p/15048495.html
[6]基于.NetCore3.1系列--日志记录之日志配置揭秘:https://www.cnblogs.com/i3yuan/p/13411793.html
[7]基于.NetCore3.1系列--日志记录之日志核心要素揭秘:https://www.cnblogs.com/i3yuan/p/13442509.html
[8].NET5中Host.CreateDefaultBuilder(args)详解:https://blog.csdn.net/qbc12345678/article/details/122983855
[9]ASP.NET启动和运行机制:https://www.jianshu.com/p/59cfaba4e2cb
[10]ASP.Net Core解读通用主机和托管服务:https://www.cnblogs.com/qtiger/p/12976207.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/283801.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

404和302

为什么80%的码农都做不了架构师&#xff1f;>>> 404 php中用header()函数是可以为返回页面添加404的头信息的&#xff0c;从而提示浏览器该网页找不到了。 所以可以使用&#xff1a;header("HTTP/1.0 404 Not Found");或者&#xff1a;header("Stat…

oracle sqlplus使用

2019独角兽企业重金招聘Python工程师标准>>> 1、常用连接方式 sqlplus / as sysdba 无需数据库进入可用状态&#xff0c;就可用用该命令登录&#xff0c;运行startup来启动。 sqlplus username/pwdhost/service_name&#xff0c;如&#xff1a; sqlplus tiger/scott…

20款IDEA 神级插件 效率提升 30 倍,写代码必备

插件目录 1. Alibaba Java Coding Guidelines 2.GsonFormat 3.A8Translation 4.Maven Helper 5.Free Mybatis plugin 6.Grep Console 7.Lombok 8.Nyan progress bar 9.FindBugs-IDEA 10.Key Promoter X 11.JavaDoc 12.ignore 13.RainbowBrackets 14.Activate-power-mode 15.C…

【温故知新】C# Linq中 Where使用技巧

微信公众号&#xff1a;趣编程ACE关注可了解更多的.NET日常实战开发技巧&#xff0c;如需源码 后台回复 源码 即可;如果觉得对你有帮助&#xff0c;欢迎关注C# Linq中 Where使用技巧hello 大家好&#xff0c;很开心又能重新分享C#编程开发技巧了&#xff0c;之前因为工作和生活…

分布式id解决方案

文章目录 1.分布式id实现方案 1.1.uuid1.2 数据库主键自增1.3 Redis自增1.4 号段模式1.5 雪花算法&#xff08;snowflake&#xff09; 1.5.1 百度&#xff08;uid-generator&#xff09;1.5.2 美团&#xff08;Leaf&#xff09;所谓id就是能够用作唯一标识的记号。 在我们日常的…

我和大象的十年往事 - 感恩、感谢、加油、腾飞

背景 http://www.idcquan.com/Special/OSCAR2018/index.html 由中国信息通信研究院主办、中国通信标准化协会支持的"OSCAR云计算开源产业大会"于2018年3月21日&#xff0d;22日在国家会议中心举行。 非常有幸获得了“OSCAR尖峰开源人物”奖项。 奖项不敢自居&#xf…

4种分布式session解决方案

cookie和session的区别和联系 cookie是本地客户端用来存储少量数据信息的&#xff0c;保存在客户端&#xff0c;用户能够很容易的获取&#xff0c;安全性不高&#xff0c;存储的数据量小 session是服务器用来存储部分数据信息&#xff0c;保存在服务器&#xff0c;用户不容易获…

Blazor University (43)JavaScript 互操作 —— 类型安全

原文链接&#xff1a;https://blazor-university.com/javascript-interop/calling-dotnet-from-javascript/type-safety/类型安全在从 JavaScript 调用 .NET[1] 部分中&#xff0c;您可能已经注意到我们的 JavaScript 的第 6 行在将随机生成的数字传递给 .NET 之前调用了 toStr…

分享 60 个神级 VS Code 插件

文章来源&#xff1a;juejin.cn/post/6994327298740600839 本文不做任何编辑器的比较&#xff0c;只是我本人日常使用 vscode 进行开发&#xff0c;并且比较喜欢折腾 vscode &#xff0c;会到处找这一些好玩的插件&#xff0c;于是越攒越多&#xff0c;今天给大家推荐一下我收…

PHP 基础篇 - PHP 中 DES 加解密详解

2019独角兽企业重金招聘Python工程师标准>>> 一、简介 DES 是对称性加密里面常见一种&#xff0c;全称为 Data Encryption Standard&#xff0c;即数据加密标准&#xff0c;是一种使用密钥加密的块算法。密钥长度是64位(bit)&#xff0c;超过位数密钥被忽略。所谓对…

PerfView专题 (第一篇): 如何寻找热点函数

一&#xff1a;背景 准备开个系列来聊一下 PerfView 这款工具&#xff0c;熟悉我的朋友都知道我喜欢用 WinDbg&#xff0c;这东西虽然很牛&#xff0c;但也不是万能的&#xff0c;也有一些场景他解决不了或者很难解决&#xff0c;这时候借助一些其他的工具来辅助&#xff0c;是…

Centos7设置IP为固定值

1.进入到系统的IP地址保存文件所在目录 [rootlocalhost ~]# cd /etc/sysconfig/network-scripts 2.修改保存IP信息的文件 [rootlocalhost ~]# vim ifcfg-eth0 &#xff08;你机器上的名字有可能不是这个&#xff0c;但是是以ifcfg-eth开头的文件&#xff09; 保存后退出 3.重启…

为 EditorConfig 文件开启错误编译失败

前言上次&#xff0c;我们介绍了 EditorConfig 文件可以自定义代码样式规则。但是&#xff0c;当我们想设置代码样式严重性&#xff0c;比如不允许编译成功时&#xff0c;又踩了不少坑。修改无效想把 var 首选项&#xff0c;从“首选"var" 仅重构”&#xff0c;改成“…

【.NET特供-第三季】ASP.NET MVC系列:传统WebForm站点和MVC站点执行机制对照

本文以图形化的方式&#xff0c;从‘执行机制’方面对照传统WebForm站点和MVC站点。请參看下面图形&#xff1a; 一、执行机制 当我们訪问一个站点的时候&#xff0c;浏览器和server都是做了哪些动作呢&#xff1f; &#xff08;本文仅仅是提供一个简单的执行过程&#xff0c;有…

投阿里被拒,说跳槽太频繁!三年两个工作,问题真的那么大吗?

什么样的跳槽频率才不算频繁&#xff1f;一位网友发问&#xff1a;投阿里被拒&#xff0c;理由是跳槽太频繁&#xff0c;不合适。三年两个工作&#xff0c;问题真的那么大吗&#xff1f;网友说&#xff0c;阿里对稳定性要求非常高&#xff0c;三年两跳和五年三跳都是红线&#…

为什么信息化 ≠ 数字化?终于有人讲明白了

作者&#xff1a;石秀峰 来源&#xff1a;谈数据&#xff08;ID&#xff1a;learning-bigdata&#xff09; 近期&#xff0c;我一做数字化咨询的朋友&#xff08;化名老王&#xff09;遇到了一个头痛的问题&#xff1a;话说老王的团队近期接了一个大单——一大型制造业的数字化…

JAVA代码—算法基础:数独问题(Sodoku Puzzles)

JAVA代码—算法基础&#xff1a;数独问题&#xff08;Sodoku Puzzles&#xff09; 数独问题&#xff08;Sodoku Puzzles&#xff09; 数独游戏&#xff08;日语&#xff1a;数独 すうどく&#xff09;是一种源自18世纪末的瑞士的游戏&#xff0c;后在美国发展、并在日本得以发扬…

Linux系统恢复

实验目的&#xff1a;熟悉了前面的启动流程&#xff0c;系统的一个大致的启动流程是怎样的&#xff0c;而其中牵扯到了些许文件&#xff0c;这些文件在系统启动时用于衔接各个步骤&#xff0c;如果这些文件损坏或缺失&#xff0c;系统将不能正常启动&#xff0c;这次写的内容就…

PerfView专题 (第二篇):如何寻找 C# 中的 Heap堆内存泄漏

一&#xff1a;背景 上一篇我们聊到了如何去找 热点函数&#xff0c;这一篇我们来看下当你的程序出现了 非托管内存泄漏 时如何去寻找可疑的代码源头&#xff0c;其实思路很简单&#xff0c;就是在 HeapAlloc 或者 VirtualAlloc 时做 Hook 拦截&#xff0c;记录它的调用栈以及分…

关于 extern C的说明

在用C的项目源码中&#xff0c;经常会不可避免的会看到下面的代码 1 #ifdef __cplusplus 2 extern "C" { 3 #endif 4 5 /*...*/ 6 7 #ifdef __cplusplus 8 } 9 #endif 它到底有什么用呢&#xff0c;你知道吗&#xff1f;而且这样的问题经常会出现在面试or笔试…