ASP.NET Core - .NET 6 以上版本的入口文件

news2025/1/14 13:56:14

ASP.NET Core - .NET 6 以上版本的入口文件

自从.NET 6 开始,微软对应用的入口文件进行了调整,移除了 Main 方法和 Startup 文件,使用顶级语句的写法,将应用初始化的相关配置和操作全部集中在 Program.cs 文件中,如下:

var builder = WebApplication.CreateBuilder(args);

// Add services to the container.

builder.Services.AddControllers();
// Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();

var app = builder.Build();

// Configure the HTTP request pipeline.
if (app.Environment.IsDevelopment())
{
    app.UseSwagger();
    app.UseSwaggerUI();
}

app.UseAuthorization();

app.MapControllers();

app.Run();

关于顶级语句语法的规范,大家可以通过官方文档了解一下:顶级语句。这种改变怎么说呢,我自己是挺不习惯的,虽然这种方式更加简洁,但是过于简洁也容易让人一脸懵,还是觉得之前的Startup文件的方式根据逻辑清晰一点,也更能做到关注点分离。

.NET 6 下应用的构建有了一些区别,不再直接使用原来的 Host 进行配置构建,而是通过 WebApplication 的静态方法构建 WebApplicationBuilder 来对主机进行配置,其实内部是 BootstrapHostBuilder 来进行的,调用 BootstrapHostBuilder 的相关配置方法时,只是将委托保存起来,之后还是通过 HostingBuilder 来进行配置。

在这里插入图片描述
在这里插入图片描述
调用 Builder 生成 WebApplication 对象时,还是以前配置主机的那些操作,传递给 WebApplication 的也是 IHost 对象。

在这里插入图片描述
而最终调用 WebApplication 对象的 Run 方法启动应用时,也是调用了主机的 StartAsync 方法,只是进行了一层包装,微软团队这样处理的好处暂时还不能很好得体会到。但总的来说改变也不大,虽然没了Startup类,但整体框架的基本模型并没有改变,之前能够在 Startup 中拿到的东西,在现在的入口文件中依旧可以拿到,我们依旧可以自由地控制整个请求管道,把握整体应用生命周期行为。

以下是 WebApplicationBuilder 对象 builder 张包含的几个关键实例

// builder 中可以获取到的几个关键实例
// 依赖注入容器
IServiceCollection service = builder.Services;
// 配置
IConfiguration configuration = builder.Configuration;
// 日志
ILoggingBuilder loggingBuilder = builder.Logging;
// 主机
IHostBuilder host = builder.Host;
IWebHostBuilder webHost = builder.WebHost;
// 环境
IWebHostEnvironment env = builder.Environment;

现在的依赖注入配置,直接通过 builder.services进行配置即可

// 依赖注入,相当于 Startup 中的ConfigureService方法
builder.Services.AddControllers();
// Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();

日志驱动配置:

// 日志提供程序配置,相当于之前主机中的 hostBuilder.ConfigureLogging
builder.Logging.AddConsole().AddDebug();

以下是 WebApplication 对象 app 中包含的几个关键实例

// app 中包含的几个关键实例
// 环境
IWebHostEnvironment enviroment = app.Environment;
// 配置
IConfiguration config = app.Configuration;
// 应用生命周期
IHostApplicationLifetime lifetime = app.Lifetime;
// 日志记录器
ILogger logger = app.Logger;
// 容器解析器
IServiceProvider serviceProvider = app.Services;

在执行完成 builder.Build(); 之后,应用已经初始化了依赖注入容器,所以我们可以通过 app.services获取我们需要的实例。

// 通过容器获取实例
var conf = app.Services.GetRequiredService<IConfiguration>();

当然,在 builder.Build(); 再通过builder.services 往容器中配置依赖注入关系是没有用的了,会抛出无效操作异常,因为容器已经创建,无法再修改。

根据顶级语句语法,顶级语句文件中存在隐式 using 指令, 但如果我们需要在 Program.cs 文件中额外引入一些命名空间也是可以的,using语句需要在文件的最前面,也可以定义方法或者类,只不过需要在顶级语句的后面,也可以使用异步方法。

在这里插入图片描述



参考文章:

顶级语句



ASP.NET Core 系列:

目录:ASP.NET Core 系列总结
上一篇:ASP.NET Core - IStartupFilter 与 IHostingStartup
下一篇:ASP.NET Core - 请求管道与中间件

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

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

相关文章

html5各行各业官网模板源码下载 (4)

文章目录 1.来源2.源码模板2.1 html实现酷炫美观的可视化大屏(十种风格示例&#xff0c;附源码)2.2 HTML5实现古典音乐网站源码模板22.3 HTML5实现古典音乐网站源码模板32.4 HTML5实现小鸟过管道小游戏源码2.5 HTML5实现俄罗斯方块小游戏2.5 HTML5实现剪刀石头布小游戏(附源码)…

springboot vue uniapp 仿小红书 1:1 还原 (含源码演示)

线上预览: 移动端 http://8.146.211.120:8081/ 管理端 http://8.146.211.120:8088/ 小红书凭借优秀的产品体验 和超高人气 目前成为笔记类产品佼佼者 此项目将详细介绍如何使用Vue.js和Spring Boot 集合uniapp 开发一个仿小红书应用&#xff0c;凭借uniapp 可以在h5 小程序 app…

播放音频文件同步音频文本

播放音频同步音频文本 对应单个文本高亮显示 使用audio音频文件对应音频文本资源 音频文本内容&#xff08;Json&#xff09; [{"end": 4875,"index": 0,"speaker": 0,"start": 30,"text": "70号二啊,","tex…

数据分析-使用Excel透视图/表分析禅道数据

背景 禅道&#xff0c;是目前国内用得比较多的研发项目管理系统&#xff0c;我们常常会用它进行需求管理&#xff0c;缺陷跟踪&#xff0c;甚至软件全流程的管理&#xff0c;如果能将平台上的数据结公司的实际情况进行合理的分析利用&#xff0c;相信会给我们的项目复盘总结带来…

No. 31 笔记 | Web安全-SQL手工注入技术学习 Part 2

一、研究背景 背景介绍 SQL注入是一种常见且高危的Web安全漏洞。攻击者可以通过构造恶意SQL查询语句来绕过验证机制&#xff0c;执行未授权操作&#xff0c;如获取敏感信息、篡改数据库内容甚至控制服务器。 研究内容 本笔记探讨以下数据库的手工注入技术&#xff1a; MySQLAc…

基于FPGA的多功能数字钟设计

基于FPGA的多功能数字钟设计 前言基础知识按键数码管 系统概述按键使用说明模块描述模块设计button_debouncebutton_controllerclock_controllerdigital_tube 整体资源用量测试视频 前言 本工程主要是数码管、按键、LED的应用开发。 注&#xff1a;本工程所有IP均使用源码开发…

人工智能实验(五)-基于神经网络的模式识别实验

一、实验目的 理解BP神经网络的结构和原理&#xff0c;掌握反向传播算法对神经元的训练过程&#xff0c;了解反向传播公式。通过构建BP网络模式识别实例&#xff0c;熟悉BP网络的原理及结构 二、实验内容 基于提供的数据集&#xff0c;训练1个BP神经网络模型&#xff1a; 1. …

【伪随机数】关于排序算法自测如何生成随机数而引发的……

以 Random 开始 可能一开始&#xff0c;你只是写到了排序算法如何生成随机数 public static void main(String[] args) {Random random new Random();int[] nums new int[10];for (int i 0; i < nums.length; i) {nums[i] random.nextInt(100);}System.out.println(&q…

【LeetCode】力扣刷题热题100道(26-30题)附源码 轮转数组 乘积 矩阵 螺旋矩阵 旋转图像(C++)

目录 1.轮转数组 2.除自身以外数组的乘积 3.矩阵置零 4.螺旋矩阵 5.旋转图像 1.轮转数组 给定一个整数数组 nums&#xff0c;将数组中的元素向右轮转 k 个位置&#xff0c;其中 k 是非负数。 class Solution { public:void rotate(vector<int>& nums, int k) …

IDEA中创建maven项目

1. IDEA中创建maven项目 在IDEA中创建Maven项目&#xff0c;前提是已经安装配置好Maven环境。如还未配置安装Maven的&#xff0c;请先下载安装。如何下载安装&#xff0c;可参考我另外篇文章&#xff1a;maven的下载与安装教程本篇教程是以创建基于servlet的JavaWeb项目为例子&…

【PyQt】如何在mainwindow中添加菜单栏

[toc]如何在mainwindow中添加菜单栏 如何在mainwindow中添加菜单栏 主要有两种方法&#xff1a; 1.直接创建mainwindow进行添加 2.使用ui文件加载添加 第二种方法更为常见&#xff0c;可以应用到实际 1.直接创建mainwindow进行添加 import sysfrom PyQt5.QtWidgets import …

Kubernetes1.28 编译 kubeadm修改证书有效期到 100年.并更新k8s集群证书

文章目录 前言一、资源准备1. 下载对应源码2.安装编译工具3.安装并设置golang 二、修改证书有效期1.修改证书有效期2.修改 CA 证书有效期 三、编译kubeadm四、使用新kubeadm方式1.当部署新集群时,使用该kubeadm进行初始化2.替换现有集群kubeadm操作 前言 kubeadm 默认证书为一…

Web前端:JavaScript标识符与变量

JavaScript介绍 JavaScript 是一种轻量级的脚本语言。所谓“脚本语言”&#xff0c;指的是它不具备开发操作系统的能力&#xff0c;而是只用来编写控制其他大型应用程序的“脚本”。 JavaScript 是一种嵌入式&#xff08;embedded&#xff09;语言。它本身提供的核心语法不算…

【从零开始使用系列】StyleGAN2:开源图像生成网络——环境搭建与基础使用篇(附大量测试图)

StyleGAN2 是英伟达团队 NVIDIA 提出的生成对抗网络&#xff08;GAN&#xff09;的一种改进版本。 它通过创新的网络架构&#xff0c;能够生成细节丰富、逼真的图像&#xff0c;特别在高频细节&#xff08;如皮肤纹理、光照等&#xff09;的表现上表现卓越。与传统 GAN 相比&am…

【时时三省】(C语言基础)经典笔试题2

山不在高&#xff0c;有仙则名。水不在深&#xff0c;有龙则灵。 ----CSDN 时时三省 题目 这个代码有什么问题&#xff1f; 过程&#xff1a; 从主函数开始进入Test函数&#xff0c;在这个Test函数里面&#xff0c;创建了一个str指针变量&#xff0c;str里面放了一个空指针&…

Therabody 与Garmin联手,共同推进运动恢复与健康科技新突破

本次合作以数据整合、人工智能驱动的数字教练与科学研究为重点&#xff0c;旨在更好地了解科学恢复对运动表现的影响 &#xff08;2025年1月13日&#xff0c;中国上海&#xff09;全球健康领导者Therabody宣布与智能手表品牌Garmin佳明建立战略合作关系&#xff0c;共同致力于…

vue城市道路交通流量预测可视化系统

项目亮点 编号&#xff1a;R09 &#x1f687; 网站大屏管理三大前端、vuespringbootmysql、前后端分离架构 &#x1f687; 流量预测道路查询流量查询 &#x1f687; echarts可视化、地图流量分析、限流分析、站点流量分析等 &#x1f687; 管理员可以进行、用户管理、道路信息…

云集电商:数据库的分布式升级实践|OceanBase案例

电商行业对数据库有哪些需求 云集电商作为一家传统电商企业&#xff0c;业务涵盖了美妆个护、服饰、水果生鲜、健康保健等多个领域&#xff0c;在创立四年后在纳斯达克上市&#xff08;股票代码&#xff1a;YJ&#xff09;。与京东、淘宝、拼多多等电商平台不同&#xff0c;云…

Lianwei 安全周报|2025.1.13

新的一周又开始了&#xff0c;以下是本周「Lianwei周报」&#xff0c;我们总结推荐了本周的政策/标准/指南最新动态、热点资讯和安全事件&#xff0c;保证大家不错过本周的每一个重点&#xff01; 政策/标准/指南最新动态 01 美国国土安全部发布《公共部门生成式人工智能部署手…

【江协STM32】11-2/3 W25Q64简介、软件SPI读写W25Q64

1. W25Q64简介 W25Qxx系列是一种低成本、小型化、使用简单的非易失性存储器&#xff0c;常应用于数据存储、字库存储、固件程序存储等场景存储介质&#xff1a;Nor Flash&#xff08;闪存&#xff09;时钟频率&#xff1a;80MHz / 160MHz (Dual SPI) / 320MHz (Quad SPI)存储容…