.NET10之WebApplicationBuilder

WebApplicationBuilderASP.NET Core 6 及以后版本引入的一个新类,它是 WebApplication 构建过程中的核心组件。它的目的是简化和优化 Web 应用程序的启动过程。通过 WebApplicationBuilder,你可以更轻松地配置应用程序的服务、环境、日志、请求管道等。

ASP.NET Core 6+ 中,WebApplicationBuilder 是对传统 HostBuilderIHost 的封装,提供了更简洁和流式的 API,使得应用程序的配置更加清晰直观。


WebApplicationBuilder 的基本功能和特点

  1. 简化应用启动过程

    ASP.NET Core 6 之前,应用程序的启动代码通常包含多步操作,比如创建 HostBuilder,配置服务、环境、日志、路由等。WebApplicationBuilder 抽象并简化了这些步骤,只需要通过流式 API 调用一次即可完成配置。

  2. 集成常见功能
    WebApplicationBuilder 集成了常见的配置功能,包括服务注册、环境设置、日志配置、配置文件加载等。

  3. 流式 API

    使用 WebApplicationBuilder 时,你可以链式调用各种方法来配置应用程序。例如,通过 builder.Services 注册服务,通过 builder.Configuration 加载配置,通过 builder.Logging 配置日志等。

  4. 灵活配置
    WebApplicationBuilder 允许你灵活地配置应用程序的服务和行为,包括依赖注入(DI)、配置源、日志记录和环境信息。

  5. 内建支持环境管理
    WebApplicationBuilder 内建对环境(如 Development、Staging、Production)和配置文件的支持,方便根据不同环境进行特定配置。


WebApplicationBuilder 的主要属性和方法

1. Services 属性

WebApplicationBuilderServices 属性是 IServiceCollection 类型的,它提供了应用程序服务的注册容器。你可以在这里注册各种服务,例如数据库上下文、缓存服务、身份验证服务、MVC 服务等。

  • 常用操作

    csharp 复制代码
    builder.Services.AddSingleton<IMyService, MyService>();
    builder.Services.AddScoped<IRepository, Repository>();
    builder.Services.AddDbContext<MyDbContext>(options => 
        options.UseSqlServer(builder.Configuration.GetConnectionString("DefaultConnection")));
2. Configuration 属性

WebApplicationBuilderConfiguration 属性是 IConfiguration 类型的,它允许你加载应用程序的配置信息。配置可以来自 appsettings.jsonappsettings.{Environment}.json、环境变量、命令行参数等。

  • 常用操作

    csharp 复制代码
    var mySettingValue = builder.Configuration["MySetting"];
3. Logging 属性

Logging 属性用于配置日志记录系统。你可以在这里添加不同的日志提供程序,例如控制台日志、文件日志或第三方日志库。

  • 常用操作

    csharp 复制代码
    builder.Logging.AddConsole();
    builder.Logging.AddDebug();
    builder.Logging.SetMinimumLevel(LogLevel.Information);
4. Environment 属性

Environment 属性允许你访问当前应用程序的运行环境(例如:Development、Staging、Production)。你可以根据环境配置不同的服务、行为或配置文件。

  • 常用操作

    csharp 复制代码
    if (builder.Environment.IsDevelopment())
    {
        builder.Services.AddRazorPages();
    }
5. WebHost 属性

WebHost 属性允许你配置 Web 服务器的设置,例如 Kestrel 的配置,URL 和端口等。

  • 常用操作

    csharp 复制代码
    builder.WebHost.ConfigureKestrel(options =>
    {
        options.Listen(IPAddress.Any, 5000); // 绑定端口
    });
6. Build() 方法

调用 Build() 方法生成 WebApplication 实例。此时,所有的服务和配置已经完成,可以准备好启动应用程序。

csharp 复制代码
var app = builder.Build();
7. Run() 方法

Run() 方法启动应用程序,开始监听和处理请求。它通常是在配置完所有中间件和路由后调用。

csharp 复制代码
app.Run();

WebApplicationBuilder 的执行流程

  1. 创建 Builder 实例

    调用 WebApplication.CreateBuilder() 方法创建一个 WebApplicationBuilder 实例,并传入命令行参数(args),这个参数会被用于配置应用程序的运行参数(如环境变量)。

    csharp 复制代码
    var builder = WebApplication.CreateBuilder(args);
  2. 配置服务容器

    builder.Services 中注册应用程序需要的所有服务。这个步骤包括注册数据库上下文、身份验证服务、缓存、外部 API 客户端、MVC、Razor Pages 等。

    csharp 复制代码
    builder.Services.AddDbContext<MyDbContext>(options => 
        options.UseSqlServer(builder.Configuration.GetConnectionString("DefaultConnection")));
    builder.Services.AddControllers();
  3. 加载配置
    builder.Configuration 会加载各种配置源,如 appsettings.jsonappsettings.{Environment}.json、环境变量等。这些配置会用于初始化应用程序。

    csharp 复制代码
    var connectionString = builder.Configuration.GetConnectionString("DefaultConnection");
  4. 配置日志记录

    builder.Logging 中配置日志记录系统。你可以选择配置不同的日志提供程序(如控制台、文件或远程日志系统),并设置日志的最低级别。

    csharp 复制代码
    builder.Logging.AddConsole();
    builder.Logging.SetMinimumLevel(LogLevel.Information);
  5. 创建 WebApplication 实例

    调用 builder.Build() 方法,生成 WebApplication 实例。在这一阶段,所有的服务、配置和日志都已经完成,WebApplication 对象准备好启动。

    csharp 复制代码
    var app = builder.Build();
  6. 配置请求管道

    使用 app.Useapp.Map 方法配置请求处理管道(middleware pipeline)。这些中间件负责处理 HTTP 请求、错误处理、静态文件、身份验证、授权等。

    csharp 复制代码
    app.UseHttpsRedirection();
    app.UseStaticFiles();
    app.UseRouting();
    app.UseAuthentication();
    app.UseAuthorization();
  7. 配置路由和端点映射

    通过 app.MapControllerRouteapp.MapRazorPages 等方法配置请求的路由规则。

    csharp 复制代码
    app.MapControllerRoute(
        name: "default",
        pattern: "{controller=Home}/{action=Index}/{id?}");
  8. 启动应用程序

    调用 app.Run() 启动应用程序并开始监听请求。此时,应用程序进入运行状态,处理传入的 HTTP 请求。

    csharp 复制代码
    app.Run();

WebApplicationBuilder 的底层原理机制

WebApplicationBuilder 的底层实现基于 ASP.NET Core 的主机和服务容器机制。其实现结合了 ASP.NET Core 中的 IHostBuilderIServiceCollection,但对这些底层组件进行了封装,以简化开发者的使用。

  1. IHostBuilder
    WebApplicationBuilder 在背后使用 IHostBuilder 来构建应用程序宿主(Host)。IHost 是应用程序的托管环境,负责启动和停止应用程序。通过 Build() 方法创建宿主实例,并将其转换为 WebApplication

  2. 依赖注入(DI)容器
    WebApplicationBuilder 提供了一个 IServiceCollection,用于注册和管理应用程序的所有服务。它使用内建的依赖注入机制来解耦不同的服务,允许服务的生命周期管理(如单例、作用域和瞬态服务)。

  3. 请求管道
    WebApplicationBuilder 配置的中间件(middleware)实际上是通过 IApplicationBuilder 接口构建的。每个中间件在请求进入时处理请求,然后可以选择将请求传递给下一个中间件。这是 ASP.NET Core 请求处理的核心机制。

  4. 路由和端点

    路由功能通过 IEndpointRouteBuilder 实现,WebApplication 使用这个接口来配置请求如何被路由到不同的控制器、页面或 API 端点。

  5. 配置和环境管理
    WebApplicationBuilder 内建对应用程序配置和环境的管理。它利用 IConfiguration 接口来加载配置信息,并通过 IWebHostEnvironment 来管理应用程序的运行环境。环境信息(如开发、生产)帮助决定哪些服务、配置和行为应当在不同环境中启用。


**总结

WebApplicationBuilderASP.NET Core 6+ 中引入的简化应用程序启动和配置的核心类。它封装了许多底层机制,包括依赖注入、环境配置、日志记录和请求处理管道,使得开发者可以更加简洁和直观地构建 Web 应用程序。

通过 WebApplicationBuilder,你可以配置服务容器、环境、日志、路由等。它的实现原理基于 IHostBuilderASP.NET Core 的各个核心组件,如 DI 容器和中间件机制,保证了在灵活性的同时,简化了配置和开发的复杂度。

相关推荐
缺点内向2 小时前
C#中如何创建目录(TOC):使用Spire.Doc for .NET实现Word TOC自动化
c#·自动化·word·.net
用户2986985301417 小时前
C#中如何创建目录(TOC):使用Spire.Doc for .NET实现Word TOC自动化
后端·c#·.net
fs哆哆1 天前
在VB.NET中,随机打乱列表顺序的算法与方法
算法·.net
专注VB编程开发20年2 天前
C#,VB.NET如何用GPU进行大量计算,提高效率?
开发语言·c#·.net
fdc20173 天前
解耦的艺术:用责任链模式构建可插拔的文件处理流水线
c#·.net·责任链模式
小码编匠3 天前
WPF 如何在 MVVM模式下实现 DataGrid编辑功能
后端·c#·.net
dLNbrcWzV4 天前
迈达斯桥梁建模与分析:探索多样桥梁结构的奥秘
.net
大黄说说5 天前
.NET 10 Minimal APIs 主要应用场景全景指南:从原型到企业级生产
.net
专注VB编程开发20年5 天前
c# vb.net Redis 左侧添加,右侧添加(添加到头部,添加到尾部)
redis·c#·.net