.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 容器和中间件机制,保证了在灵活性的同时,简化了配置和开发的复杂度。

相关推荐
我是唐青枫11 小时前
C#.NET StructureMap 从依赖注入到项目实战
开发语言·c#·.net
Lost of 程序猿12 小时前
C# 12 / .NET 9 新特性机制深度:编译器替你写了什么,哪些糖吃下去会出事
windows·c#·.net
唐青枫1 天前
C#.NET StructureMap 从依赖注入到项目实战
c#·.net
智码看视界1 天前
.NET 10 推理大模型TensorSharp 3.3.0 部署实测:纯.NET推理引擎反超llama.cpp 1.5倍,DFlash2提速62%
c#·.net·llama.cpp·.net 10·tensorsharp·本地大模型推理·开源推理引擎
唐青枫2 天前
别把日志、权限写进业务方法:C#.NET 动态代理从原理到实战
c#·.net
风云2 天前
Vane.Dispatch 1.0.0 发布:一个与容器、传输层零耦合的 .NET 服务分发引擎
微服务·mvc·.net·ndf·vane.dispatch
张人玉2 天前
基于 C# WinForms + .NET 8 + SQLite + TCP Socket 的多连接通讯调试工具——TCP通讯助手(TcpAssistant)
tcp/ip·sqlite·c#·.net
mldong3 天前
C# 开发者也有自己的轻量工作流引擎了:NuGet 装包,5 分钟跑通一条审批流
后端·c#·.net
风云3 天前
MiniLog 1.0 GA 发布:零分配、零依赖的 .NET 高性能日志框架
开源·c#·.net·日志·高性能·minilog