.NET Core开发实战(第4课:Startup:掌握ASP.NET Core的启动过程)--学习笔记

04 | Startup:掌握ASP.NET Core的启动过程

新建一个 ASP.NET Core Web 应用程序

选择 API

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>();});
}

在 Program.cs 的 Main 函数中

CreateHostBuilder 方法返回了一个 IHostBuilder

它是应用程序启动的核心接口

IHostBuilder 接口有六个方法:

主要关注以下三个:

  • ConfigureAppConfiguration

  • ConfigureHostConfiguration

  • ConfigureServices

接下来,我们添加一些代码演示整个应用程序的启动过程:

public static IHostBuilder CreateHostBuilder(string[] args) =>Host.CreateDefaultBuilder(args).ConfigureAppConfiguration(builder =>{Console.WriteLine("ConfigureAppConfiguration");}).ConfigureServices(service =>{Console.WriteLine("ConfigureServices");}).ConfigureHostConfiguration(builder =>{Console.WriteLine("ConfigureHostConfiguration");}).ConfigureWebHostDefaults(webBuilder =>{Console.WriteLine("ConfigureWebHostDefaults");webBuilder.UseStartup<Startup>();});

接着,在 Startup 的三个方法中添加一些代码

public Startup(IConfiguration configuration)
{Console.WriteLine("Startup");...public void ConfigureServices(IServiceCollection services)
{Console.WriteLine("ConfigureServices");...public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{Console.WriteLine("Configure");...

启动程序查看输出:

ConfigureWebHostDefaults
ConfigureHostConfiguration
ConfigureAppConfiguration
ConfigureServices
Startup
Startup.ConfigureServices
Startup.Configure

调整一下委托的注册顺序

public static IHostBuilder CreateHostBuilder(string[] args) =>Host.CreateDefaultBuilder(args).ConfigureWebHostDefaults(webBuilder =>{Console.WriteLine("ConfigureWebHostDefaults");webBuilder.UseStartup<Startup>();}).ConfigureServices(service =>{Console.WriteLine("ConfigureServices");}).ConfigureAppConfiguration(builder =>{Console.WriteLine("ConfigureAppConfiguration");}).ConfigureHostConfiguration(builder =>{Console.WriteLine("ConfigureHostConfiguration");});

会得到不同的结果

ConfigureWebHostDefaults
ConfigureHostConfiguration
ConfigureAppConfiguration
Startup
Startup.ConfigureServices
ConfigureServices
Startup.Configure

本质上,如果查看源码会发现,委托注册进去之后,实际上是按照一定的顺序来执行的:

1、ConfigureWebHostDefaults

这个阶段注册了应用程序必要的几个组件,比如配置的组件、容器组件

2、ConfigureHostConfiguration

用于配置应用程序启动时必要的配置,比如应用程序启动时所需要监听的端口,URL 地址

在这个过程可以嵌入一些自己配置的内容,注入到配置的框架中

3、ConfigureAppConfiguration

用于嵌入自己的配置文件,供应用程序读取,这些配置将会在后续的应用程序执行过程中间每个组件读取

4、ConfigureServices, ConfigureLogging, Startup, Startup.ConfigureServices

用于往容器里注入应用的组件

5、Startup.Configure

用于注入中间件,处理 HttpContext 整个请求过程

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{Console.WriteLine("Startup.Configure");if (env.IsDevelopment()){app.UseDeveloperExceptionPage();}app.UseHttpsRedirection();app.UseRouting();app.UseAuthorization();app.UseFileServer();app.UseWebSockets();app.UseEndpoints(endpoints =>{endpoints.MapControllers();});
}

在整个启动的过程中,Startup 这个类不是必要的,只是让代码结构更加合理

public static IHostBuilder CreateHostBuilder(string[] args) =>Host.CreateDefaultBuilder(args).ConfigureWebHostDefaults(webBuilder =>{Console.WriteLine("ConfigureWebHostDefaults");//webBuilder.UseStartup<Startup>();webBuilder.ConfigureServices(services =>{Console.WriteLine("webBuilder.ConfigureServices");services.AddControllers();});webBuilder.Configure(app =>{Console.WriteLine("webBuilder.Configure");app.UseHttpsRedirection();app.UseRouting();app.UseAuthorization();app.UseFileServer();app.UseWebSockets();app.UseEndpoints(endpoints =>{endpoints.MapControllers();});});}).ConfigureServices(service =>{Console.WriteLine("ConfigureServices");}).ConfigureAppConfiguration(builder =>{Console.WriteLine("ConfigureAppConfiguration");}).ConfigureHostConfiguration(builder =>{Console.WriteLine("ConfigureHostConfiguration");});
}

启动程序查看输出:

ConfigureWebHostDefaults
ConfigureHostConfiguration
ConfigureAppConfiguration
webBuilder.ConfigureServices
ConfigureServices
webBuilder.Configure

服务注册一般放在 Startup 的 ConfigureServices,一般是services.AddXXX

public void ConfigureServices(IServiceCollection services)
{services.AddMvc();services.AddAuthentication();services.AddAuthorization();Console.WriteLine("Startup.ConfigureServices");services.AddControllers();
}

中间件的注册一般放在 Startup 的 Configure

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{Console.WriteLine("Startup.Configure");if (env.IsDevelopment()){app.UseDeveloperExceptionPage();}app.UseHttpsRedirection();app.UseRouting();app.UseAuthorization();app.UseFileServer();app.UseWebSockets();app.UseEndpoints(endpoints =>{endpoints.MapControllers();});
}

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

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

相关文章

C语言---二进制和文本文件的备份

C语言—二进制和文本文件的备份 学习参考&#xff1a; https://www.cnblogs.com/jackytang/p/9011127.html 代码&#xff1a; #include <stdio.h> #include <stdlib.h> int copyFile(char *fileRead, char *fileWrite); int main() {char fileRead[100]; // 要…

聊聊统一身份认证服务

源宝导读&#xff1a;当企业的应用系统逐渐增多后&#xff0c;每个系统单独管理各自的用户数据容易行成信息孤岛&#xff0c;分散的用户管理模式阻碍了企业应用向平台化演进。本文将介绍构建统一身份认证的技术方案和思路。一、背景当企业的应用系统逐渐增多后&#xff0c;每个…

Word List 26

Word List 26 如果存在什么问题&#xff0c;欢迎批评指正!谢谢&#xff01;

[蓝桥杯2015决赛]五星填数-枚举+数论

解题思路&#xff1a; 对于一种符合题意的情况&#xff0c;旋转和对称之后结果也是一样&#xff0c;所以我们要除去旋转(/5)和对称(/2)的情况&#xff0c;所以结果要除以10 代码如下&#xff1a; #include <iostream> #include <algorithm> using namespace std;…

word List27

word List27 如果存在什么问题&#xff0c;欢迎批评指正&#xff01;谢谢&#xff01;

如何看待程序媛们的职场焦虑和未来职业规划?

本文公众号平台首发于【DotNET技术圈】&#xff0c;来自邹溪源一 引子昨天&#xff0c;有一位通过我们长沙.NET技术社区公众号【DotNET技术圈】加我的好友的姑娘问了一个关于职业规划的问题&#xff1a;“在你的身边有没有认识的女程序员&#xff0c;可以告诉一下我们她们的职业…

[蓝桥杯2016初赛]搭积木-枚举,next_permutation

代码如下&#xff1a; #include <iostream> #include <algorithm> using namespace std;int a[] {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};bool check() {if (a[0] > a[1] && a[0] > a[2] &&a[1] > a[3] && a[1] > a[4] &&a…

word List28

word List28 如果存在什么问题&#xff0c;欢迎批评指正&#xff01;谢谢&#xff01;

target not created怎么解决_怎么才能最短时、高效、踏实地学习 Python(附链接)...

作者&#xff1a;九章算法来源&#xff1a;数据Seminar本文约2400字&#xff0c;建议阅读5分钟本文教你高效学习全球主流编程语言Python。标签&#xff1a;PythonPython是当前全球的主流编程语言之一&#xff0c;基于其简洁的语法结构&#xff0c;可以让开发者用更少的代码完成…

【5min+】 巨大的争议?C# 8 中的接口

介绍【五分钟的dotnet】是一个利用您的碎片化时间来学习和丰富.net知识的博文系列。它所包含了.net体系中可能会涉及到的方方面面&#xff0c;比如C#的小细节&#xff0c;AspnetCore&#xff0c;微服务中的.net知识等等。5min不是超过5分钟的意思&#xff0c;""是知识…

[蓝桥杯2016初赛]寒假作业-next_permutation枚举

暴搜代码&#xff08;耗时较长&#xff0c;要90s左右&#xff09;如下&#xff1a; #include <iostream> using namespace std; const int N 15; int a[N]; bool st[N]; int cnt;void dfs(int u) {if (u 13) {if (a[1] a[2] a[3] && a[4] - a[5] a[6] &…

word List29

word List29 如果存在什么问题&#xff0c;欢迎批评指正&#xff01;谢谢&#xff01;

.NET Core开发实战(第5课:依赖注入:良好架构的起点)--学习笔记(上)

05 | 依赖注入&#xff1a;良好架构的起点为什么要使用依赖注入框架借助依赖注入框架&#xff0c;我们可以轻松管理类之间的依赖&#xff0c;帮助我们在构建应用时遵循设计原则&#xff0c;确保代码的可维护性和可扩展性ASP.NET Core 的整个架构中&#xff0c;依赖注入框架提供…

非常实用的word文本括号匹配是否正确的code,可按照此思路扩展到python处理大批量文本文件的检错中,非常实用!!!

非常实用的word文本括号匹配是否正确的code&#xff0c;可按照此思路扩展到python处理大批量文本文件的检错中&#xff0c;非常实用&#xff01;&#xff01;&#xff01; 原理&#xff1a; 栈 代码&#xff1a; #include <stdio.h> #include <stdlib.h> #includ…

分区式存储管理c++_分区机要变形缝,纵横交接卫浴厨:防火阀参数的高效记忆口诀...

防火阀也是常考点&#xff0c;特别是设置部位、温度&#xff0c;是最容易考的地方。记起来有点麻烦&#xff0c;从中提取精炼一下&#xff0c;可以用如下6句话&#xff0c;就能记住。防火阀与排烟防火阀重点参数记忆要领&#xff1a;分区机要变形缝&#xff0c;纵横交接卫浴厨独…

ASP.NetCore+VUE 源码获取成绩管理系统(二)

雨水来了明天是二十四节气中的雨水&#xff0c;希望能给干燥的春天带来新的生机&#xff0c;抖擞抖擞精神迎接新的一天吧。上篇文章ASP.NetCoreVUE 实现学生成绩管理系统(一) 中&#xff0c;我对我开发的项目做了简单的说明&#xff0c;发现还是有很多小伙伴感兴趣的&#xff0…

word List 30

word List 30 如果存在什么问题&#xff0c;欢迎批评指正&#xff01;谢谢&#xff01;

研发协同平台持续交付之代理服务实践

源宝导读&#xff1a;插件系统大大提高了系统的扩展性&#xff0c;有利于模块化开发。系统发布后&#xff0c;当我们需要对系统进行扩充&#xff0c;可以再不编译的情况下更新系统的插件即可。基于热拔插的软件系统提高了持续交付能力&#xff0c;在添加新特性的同时保持核心结…

vscode python 自动补全_利用CodeBERT,这个VS Code扩展可以自动生成Python文档字符串...

机器之心报道编辑&#xff1a;魔王该扩展利用可处理编程语言和自然语言的预训练模型 CodeBERT&#xff0c;实现快速生成 Python 文档字符串的功能。Visual Studio Code(简称 VS Code)是一个由微软开发&#xff0c;同时支持 Windows、 Linux 和 macOS 等操作系统的免费代码编辑器…

[蓝桥杯2016初赛]报纸页数-生活常识+思维

题目描述 X星球日报和我们地球的城市早报是一样的&#xff0c;都是一些单独的纸张叠在一起而已。每张纸印有4版。 比如&#xff0c;某张报纸包含的4页是&#xff1a;5,6,11,12&#xff0c;可以确定它应该是最上边的第2张报纸。 我们在太空中捡到了一张X星球的报纸&#xff0c;…