返回

ASP.NET Core源码解读 - 深入剖析应用启动机制

后端

前言

ASP.NET Core作为跨平台、高性能的开源框架,在应用启动时添加了许多框架提供的服务。通过使用Kestrel作为Web服务器并启用IIS集成,我们的程序可以跨平台启动。本文将深入剖析ASP.NET Core应用启动机制,从源码的角度,一步步了解ASP.NET Core是如何启动的。

应用启动流程

ASP.NET Core应用的启动流程大致可以分为以下几个步骤:

  1. 项目启动 :当我们运行ASP.NET Core项目时,首先会执行Program.cs文件中的Main方法。
  2. 创建Web主机构建器 :在Main方法中,我们会创建WebHostBuilder对象,并对其进行配置。
  3. 配置服务 :在WebHostBuilder对象上,我们可以调用ConfigureServices方法来配置服务。这些服务将在整个应用生命周期内可用。
  4. 配置管道 :在WebHostBuilder对象上,我们可以调用Configure方法来配置管道。管道定义了请求处理的顺序和方式。
  5. 启动Web主机 :在对WebHostBuilder对象进行配置后,我们可以调用Build方法来构建Web主机,然后调用Run方法来启动Web主机。

源码解析

接下来,我们从源码的角度,一步步分析ASP.NET Core应用的启动过程。

项目启动

当我们运行ASP.NET Core项目时,首先会执行Program.cs文件中的Main方法。在Main方法中,我们会创建WebHostBuilder对象,并对其进行配置。

public static void Main(string[] args)
{
    var host = new WebHostBuilder()
        .UseStartup<Startup>()
        .Build();

    host.Run();
}

创建Web主机构建器

Main方法中,我们首先创建WebHostBuilder对象。WebHostBuilder对象是用来构建和配置Web主机的。在WebHostBuilder对象上,我们可以调用各种方法来对其进行配置。

配置服务

WebHostBuilder对象上,我们可以调用ConfigureServices方法来配置服务。这些服务将在整个应用生命周期内可用。在ConfigureServices方法中,我们可以添加各种服务,如依赖注入服务、数据库连接服务等。

public static void Main(string[] args)
{
    var host = new WebHostBuilder()
        .UseStartup<Startup>()
        .ConfigureServices(services =>
        {
            services.AddDbContext<ApplicationDbContext>();
            services.AddTransient<IEmailService, EmailService>();
        })
        .Build();

    host.Run();
}

配置管道

WebHostBuilder对象上,我们可以调用Configure方法来配置管道。管道定义了请求处理的顺序和方式。在Configure方法中,我们可以添加各种中间件,如路由中间件、身份验证中间件等。

public static void Main(string[] args)
{
    var host = new WebHostBuilder()
        .UseStartup<Startup>()
        .ConfigureServices(services =>
        {
            services.AddDbContext<ApplicationDbContext>();
            services.AddTransient<IEmailService, EmailService>();
        })
        .Configure(app =>
        {
            app.UseRouting();
            app.UseAuthentication();
            app.UseAuthorization();
            app.UseEndpoints(endpoints =>
            {
                endpoints.MapControllers();
            });
        })
        .Build();

    host.Run();
}

启动Web主机

在对WebHostBuilder对象进行配置后,我们可以调用Build方法来构建Web主机,然后调用Run方法来启动Web主机。

public static void Main(string[] args)
{
    var host = new WebHostBuilder()
        .UseStartup<Startup>()
        .ConfigureServices(services =>
        {
            services.AddDbContext<ApplicationDbContext>();
            services.AddTransient<IEmailService, EmailService>();
        })
        .Configure(app =>
        {
            app.UseRouting();
            app.UseAuthentication();
            app.UseAuthorization();
            app.UseEndpoints(endpoints =>
            {
                endpoints.MapControllers();
            });
        })
        .Build();

    host.Run();
}

总结

通过对ASP.NET Core应用启动机制的分析,我们了解到ASP.NET Core应用的启动过程主要包括项目启动、创建Web主机构建器、配置服务、配置管道和启动Web主机等步骤。通过对源码的解析,我们深入了解了ASP.NET Core应用是如何启动的。